Every manual has its own vocabulary
23 renameable labels · 8 column on/off settings · affects the whole manual
This one deserves more explanation than it has had, because it is the root of a lot of the confusion and it is not a mistake - it is a deliberate feature that carries a real cost.
Each manual carries 23 labels it can set for itself. These are not just BOM column headings. They rename the entire left-hand navigation - Home, Schematics, Mechanical Assembly, Photos, Bill of Materials, Troubleshooting, Documentation, Multimedia - along with the section headings on the schematic, machine state, assembly and troubleshooting pages. A separate set of eight settings decides which BOM columns appear at all.
The reason is sound. Each manual documents a different machine for a different customer, and those customers do not share vocabulary. What one plant calls an Item Number, another calls a Tag, a Balloon Number, or a Callout. A manual that speaks its reader's language is a better manual, and this is how the Smart Manual delivers that.
The cost is that a field's name no longer tells you which field it is. The column showing Title is called whatever that manual's "item number" label says. Two people looking at two manuals are looking at the same underlying field under two different names, and neither has any way to know. That is most of why this conversation was needed at all.
It also makes importing genuinely awkward. An import file has to use one fixed set of column names, because the importer needs to know what each column means. But the person filling in that file is working from a manual that calls those things something else. Today the CSV template uses fixed names regardless of what any manual calls them - a deliberate balancing act for a first iteration, which keeps imports predictable at the cost of the template not matching the screen the author is looking at. It was the right call to ship, but it is worth revisiting properly rather than treating it as settled.
This is also a good illustration of why we have suggested moving parts of this toward AI assistance. Solving it with conventional rules means choosing between two bad options: fix the vocabulary and lose the per-customer flexibility that makes these manuals good, or hand-maintain a mapping from every manual's wording to the underlying fields, which grows and breaks with every new manual. A system that can read a spreadsheet and work out that this customer's "Balloon No." column means the same thing as another's "Tag" handles that gracefully, without a rigid template and without anyone maintaining the mapping. This is precisely the kind of problem where a fuzzy match to intent beats a brittle set of rules.
One specific defect sits inside this design: the "description" label is used in two different places for two different fields, which is the collision described under BOM Description.
Fields that vary by language
11 areas of the app · 7 component fields
Components store separate values per language for Title, Slug, Brand/Part Number, Safety Notes, Function, Component Description and BOM Description.
What this means for the discussion: the value stored on the component is not necessarily the value a reader sees, and a field can hold different content in different languages. Any rule we agree on has to hold in every language, or fall back predictably.
Category and Tags are the exceptions. They are not translated.
Slug rebuilding
Everywhere a Slug exists
Anything with a Slug rebuilds it from its Title before every save - lower-cased, with punctuation and spaces turned into underscores. Hyphens are kept, which is what produced the recent download failure on names beginning with a dash.
No record of previous values is kept, so old links stop landing correctly the moment a title changes.
The UID field
Components · Categories · Machine States · Manuals
A single change on 26 February 2026 added UID to all four at once. None received a rule preventing duplicates, and two of the four were not set up for fast lookup either.
On all four, the field appears only in the CSV column list. Nothing displays it, nothing searches it, and no importer writes to it. It is empty in every record in the system.
The written descriptions do not agree with each other. On components, UID is described at length as the schematic tag number, with a worked example of its prefix, number and suffix. On manuals, categories and machine states it is described instead as a "unique identifier (auto-generated if blank)". Those are two different ideas of what the field is, and the second one describes behavior that does not exist anywhere - nothing is ever auto-generated.
Taken together, this is the strongest evidence available that the field was added before anyone had settled what it was for.
Three ways of simplifying a name
Components · Manuals · Linked manuals
Several places need a simplified version of a name - safe for a web address or a filename, with punctuation and spaces removed. The system does this in three different ways, and they produce different results from the same input.
Components keep hyphens and turn everything else into underscores, and the result is stored. Manuals strip hyphens entirely and turn spaces into hyphens, and the result is not stored at all - it is recalculated every time it is needed. Linked manuals use a third variant, close to the manual one but missing a correction.
That missing correction matters. It is the exact cause of the download failure fixed in July: a name beginning with punctuation produced a filename beginning with a hyphen, which the download machinery could not handle. The fix was applied to ordinary manuals. Linked manuals still carry the original version and remain exposed to the same failure.
None of these three is wrong on its own. Having three is the problem, because it means the same title produces different results depending on which part of the system is asking.
Importing can only create, never update
All CSV imports
The importer creates new components. It has no way to update an existing one. Re-importing a file whose components are already in the system runs into the rule that stops two components in a BOM sharing a Title, and those rows fail rather than updating.
This cannot be fixed before the identifier question is settled, because updating requires something dependable to match an incoming row against an existing component. That is the same decision as Q1 below.