Strings are the simplest gmeta value type.
A string represents one current scalar value for a (target, key) pair.
Examples:
agent:model = claude-4.6owner = schaconreview:signoff = schacon@gmail.com
Summary
- One current value per key
- Serialized as a single terminal blob
- Removal uses a key tombstone
- Concurrent updates resolve by last-writer-wins
Serialized tree shape
For a string value, write the string to:
[base]/<key segments>/__value
Examples:
commit/13/<full-target>/agent/model/__valuepath/src/metrics/__target__/owner/__value
The blob contents are the raw string value.
Tombstones
If a string key is removed, serialize a tombstone at:
[base]/__tombstones/<key segments>/__deleted
The tombstone blob should be the same blob as the __value was. This way Git reuses the blob and we can do content comparisons if needed in cases of conflict.
When a string is set again after deletion, the tombstone is cleared locally and omitted from the next serialization.
Merge semantics
Merging trees can technically use either ours or theirs strategies, but one value should win out. Projects or individuals can determine which they prefer.
The default in our implementation is ours, so that both values are in the history and reverting is possible.