Monk Spindle is the deterministic bridge between explicit VFS/Monk observations and Monk Loom. A record contains named signals; a recipe converts them into the model's exact ordered fixed-point features. The recipe is data, fingerprinted independently of model weights, and remains bound to one attachment identity and one Monk policy fingerprint.
Extractors
| Extractor | Accepted signal | Base value |
|---|---|---|
integer | Integer, never Boolean | The signal value. |
boolean | Boolean | truth_scale for true, otherwise zero. |
count | Array or object | Number of immediate items. |
equals | Scalar JSON value | truth_scale when type and value equal match, otherwise zero. |
Integer transform
For every binding, Spindle computes truncate_toward_zero(base × numerator ÷ denominator) + offset. It then either rejects an out-of-range result or clamps it to the corresponding model feature range according to range_policy. There is no floating-point conversion.
Exact binding
- There is exactly one binding for every model feature.
- Binding order must equal attachment feature order.
- Signal and feature names use portable identifiers.
- Missing signals and type mismatches fail closed.
- The extraction record binds recipe, record, attachment, Monk policy, named values, and source mapping in one fingerprint.
Spindle does not inspect arbitrary file semantics. A host or capture tool creates explicit named signals; the recipe makes their normalization reviewable and reproducible in Python and Pure Perl.