kcode-k1-launch-node-codec 0.1.0

Strict value, action, and projection codec for K1 launch-node assignments
Documentation
# kcode-k1-launch-node-codec

`kcode-k1-launch-node-codec` is the pure binary boundary for K1 launch-node values, Set actions, and append-only projection records.

## Values

The crate reexports `Authority`, `GroupId`, `TxId`, and `UserId` from `kcode-k1-access-types`, and `NodeId` from `kcode-k1-kmap-format`. `TargetName::new` accepts owned text containing 1 through 80 Unicode scalar values, at least one non-whitespace scalar, no control scalar, and at most 320 UTF-8 bytes. It preserves case, spaces, slashes, and every other accepted scalar exactly. `TargetName` exposes borrowed and owned text accessors. `TargetId` owns an authority and target name and exposes both by reference.

## Set action

`SetAction::new` takes a 16-byte operation ID, target ID, and node ID. Its accessors borrow those values. `encode` emits:

1. version byte `1`
2. action tag byte `1`
3. 16 operation-ID bytes
4. authority tag `1` for User or `2` for Group
5. the authority's 12-byte ID
6. target UTF-8 byte length as little-endian `u16`
7. exact target bytes
8. 12 NodeId bytes

`SetAction::decode` requires exactly one action. It rejects unknown versions or tags, malformed identifiers, invalid UTF-8 or target names, truncation, and trailing bytes.

## Projection

`PROJECTION_HEADER` is the eight-byte file header `K1LNV3\0\0`. `ProjectionRecord::new` takes a callback transaction ID, target ID, and node ID. `encode` returns only the record bytes following the file header:

1. 12 callback TxId bytes
2. one authority tag and its 12-byte ID
3. target byte length as little-endian `u16` and exact target bytes
4. 12 NodeId bytes
5. little-endian `u32` checksum

The checksum is FNV-1a over every record byte before the checksum, with offset `0x811c9dc5` and multiplier `0x01000193`. `decode_projection_record` reads the first record in a slice. It returns `ProjectionDecode::Complete` with the record and consumed byte count, leaving later bytes to the caller, or `ProjectionDecode::Incomplete` when the final record lacks bytes. Complete invalid names, identifiers, authority tags, or checksums return `CodecError`.

## Non-goals

This crate performs no filesystem access, migration, KTO orchestration, peering, callbacks, locking, application-state management, or version-2 compatibility. Callers own header handling, append durability, replay policy, and coordination.