Attaching files

Attaching a file to a chain node is the gesture that makes a folder readable years later. The simple case, one file for one sample, is settled through the context menu. The frequent case, an analysis export covering eleven samples, is settled through the notion of step and a batch attachment.

The case that matters

An ICP-MS export carries no sample name in its file name, since it covers a whole session. The simplest signal, looking for the sample name inside the file name, therefore fails exactly where the information is most valuable. Attaching the same file eleven times to eleven nodes is not a workable answer.

The notion of step

A step is the product suffix shared by several chains. "GSD-3 · Digest" and "BCR 723 · Digest" are the same moment of the procedure, on two samples. The gesture then becomes: choose the file, say which step it talks about, confirm the proposed batch.

GET /chaine/etapes available steps POST /chaine/rapprocher-lignes { racine, fichier, etape } POST /chaine/rattacher-lot { racine, rattachements }

Matching by rows

The server reads the file in depth and looks for a sample name in every row, by equality first and then by inclusion, so that "GSD 3" is not swallowed by "GSD 30". It returns one proposal per row, with its locator, which can be unticked at will before writing.

CaseHandling
Several rows match the same nodeOnly one is kept, the others become orphans. Three contradictory locators set without noticing would be worse than none.
A row matches no nodeReturned separately, so the file does not appear fully handled.
A node appears in no rowReturned too: a sample missing from an export is information.
WriteThe whole batch in a single write of the descriptor.
Checked against real folders: "GSD-3" matches "GSD 3", and "NCS DC 73349" matches "NCS-DC 73349".

Where to find it

Campaign panel Chain section Attach an analysis file Choose the file Choose the step Attach the batch

Right-clicking a node leads to the same screen and prefills the step. From the Chain section button, however, no step is assumed: the empty step designates the roots of the chain, and using it as a default would match an analysis export against the raw samples without anyone asking for it.

The file list

The file is chosen from a list grouped by folder, with the name alone on its line and the folder as a heading. Thirty-nine files in a flat list are read line by line; the same files under eight folders form a tree the eye can scan. The filter ignores accents and separators, and sorting is by path so that a folder only ever gets one heading.

Locators

An attachment can carry a structured locator, which says where to look inside the file.

{ "feuille": "Run_2", "ligne": 47, "plage": "C47:H47", "page": null, "note": "second pass, AG1-X8 column" }

A free note is always accepted, including on its own. The file preview is there to point at the row rather than type it: the display shows twenty-five rows, but searching within the preview walks two thousand, otherwise searching would only comb the header.

Finding a file again

Search combines three signals, none of which is decisive on its own: the term typed, proximity to the current node, and the kind expected at that step.

SignalWeightNote
Typed term100On the name, and on the content where it is readable.
Proximity to the node60With no term typed, the node's sample name is the query.
Expected kind25On its own it does not make a result but a fallback, shown separately and collapsed.

Content search returns the row where the term was found, which prefills the locator of the attachment.

Integrity state

Every node carries a state describing the evidence available for what it asserts. It is computed on demand and never stored: writing it into the descriptor would create a second truth, which a rescan would make diverge.

StateMeaning
rompuAn attached file is no longer inside the campaign.
modifieThe hash has changed since the attachment.
declareEntered with no supporting file.
attesteAt least one file present, with an unchanged hash.
videNothing attached. This state is not displayed.

A node carries the worst state of its files: a result backed by two workbooks, one of which has disappeared, is broken, not half attested. Files on the incoming edge count for the produced node, since it is the operation that produces the material.

An attachment records the file hash at the moment of attachment. Without it, "attested" would only say "a file carries this path today", which a simple re-save makes false with nothing changing on screen. An older attachment, with no recorded hash, stays attested as long as the path exists.

The state describes the available evidence, never the quality of the work. vide is not displayed, since a node not yet filled in is not at fault: a marking that reads as a reproach pushes people to fill fields in order to turn off warning lights. Shape carries the information as much as colour, filled, hollow, half or square, because a state told by colour alone disappears in print and for anyone who does not distinguish green from red.

Related pages