20. The editor holds no camera facts¶
- Date: 2026-11-04; carried out 2026-11-06; changed 2026-11-13
- Status: accepted
- Rule: The editor holds no camera facts: each, the file's layout included, is in the definition, and an unknown kind is refused; the kit's move into the camera's data.
Context¶
Decision 19 made definitions files read at run time, yet an audit of editor/src found the ILCE-1M2's facts in 26
places (the memory mirrors and sets, the default compare columns, menu names, the link's timing, a rule that hid
expert-only settings by their names, the built-in sample), and the file's container compiled in as constants, in
kit/camkit/camset.py and kit/tools/identify.py too. A camera whose file differed from the a1 II's in one offset
needed a new editor, and nobody could make a definition match their camera without changing the program. The kit,
built on the a1 II, held more of that body's facts in its code (its hand tables, the records that hold an owner's own
data, the record that names the shooting mode): a fact found by hand on another body could not reach its definition,
and that body's published sample could keep a lens list with its serial numbers.
Decision¶
The editor knows nothing about any camera. Every camera-specific fact, the file's header and container layout
included, lives in the definition, so a definition can be made to match a camera without changing the program:
camera.file describes the whole container, and the other facts are additive camera keys and a per-setting
expert flag. The program holds only the vocabulary the block's words name and generic photography (APEX stops,
labels such as "F2.8" and "1/250"); a kind it does not know is refused by name, never guessed. A file is read by
trial against every loaded block.
The kit keeps a camera's facts as that camera's data, in data/<model>_fw<fw>/: the camera file (the container
block, which the kit reads files through as the editor does, the records that hold an owner's own data, the live
records its tools read), which the definition's camera section is copied from, and the hand tables (what the mapping
found by hand), which kit/schema_update.py applies to that camera's definition alone; each of the two has its JSON
Schema. How each hand fact was proved is the mapper's, in a private file whose shape is public
(schemas/hand-evidence.schema.json; decision 16).
The safety lists stay code (kit/camkit/safety.py), extended with each body's names, since they guard every body;
camlink and the camera helper compile in their buttons and properties never sent (kit/common/never_touch.h). The a1
II's tables still in the kit's code (kit/camkit/models.py names them) apply to that body's files alone, left out or
refused on any other, and each is marked to move into its data.
Before 2026-11-13 the record spoke of the editor alone, and of the kit only that it reads the same block from the camera file; it did not record Edit anyway…, which the editor had by 0.1.0 (2026-11-09).
Consequences¶
- A camera whose file uses the known checksums and framing but places its fields elsewhere needs a block, not a new
editor; whoever writes it learns at once whether it reads the file (
kit/tools/identify.pydrafts one for a file no block reads). A container that needs a checksum, framing or encoding the vocabulary lacks still needs a change to the programs: a definition names an algorithm, never carries one. - A file is edited only when both its checksums hold under its block; one whose layout signature or section counts are not the definition's opens view-only (for the definition's model, Edit anyway… unlocks the settings kept where the editor expects them). With no definition loaded, no file opens.
- One of the editor's tests fails where its code or texts name a setting key, a record id, a camera model or a shipped
definition's file (
editor/src/no_camera_facts.rs); it catches names, not behaviour, so the rule still rests on review. - The container's one source is the block;
docs/formats/sony_camset.ksydescribes the ILCE-1M2's for Kaitai's tools, tied to its block by a test until the.ksyis generated from it. - Another body's mapping records what it finds by hand in its own hand tables, and its sample is scrubbed by its own
camera file's
personal_records, without whichkit/tools/make_sample.pyandkit/tools/check_public.pyrefuse it.
See also: the data files' page (the container block, the camera file, the hand tables and the hand evidence file) and decision 14 (one source per fact).