instrument-data-to-allotrope — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited instrument-data-to-allotrope (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Converts raw laboratory instrument data into a valid Allotrope Simple Model (ASM) JSON data instance that conforms to the target ASM schema. Covers schema discovery, data parsing, JSON generation, and schema validation.
ASM organises experimental data as a hierarchy of modular documents. The generated JSON must mirror this structure exactly.
Technique Aggregate Document ← top-level container (e.g. "plate reader aggregate document")
├── Device System Document ← instrument hardware metadata (model, manufacturer, serial)
├── Data System Document ← software / data-processing metadata (version, file paths)
└── Technique Document[] ← one entry per execution of the technique (e.g. one plate run)
├── Measurement Aggregate Document
│ └── Measurement Document[] ← one entry per individual measurement (e.g. one well)
├── Processed Data Document ← derived results (peak lists, spectra, …)
├── Sample Document ← sample identity and provenance
├── Device Control Document ← acquisition settings and parameters
└── Calculated Data Document ← values computed across measurements or samplesKey points:
plate reader aggregate document)$asm.manifest at the root declares the schema — copy this value verbatim from a valid example instance; the URI must end in .manifestmeasurement document arrayplate-reader)<input_path>.asm.json): Destination for the generated ASM JSONCall the describe_asm MCP tool with the asm_model parameter.
Constraints:
describe_asm before fetching any schemaasm_json_schema URI for subsequent stepsasm_data_instance_examples URIs to understand expected document shapedescribe_asm errors, call list_asms first to find the correct nameCall fetch_asm_document with the asm_json_schema URI from Step 1.
Constraints:
asm_json_schema URI as asm_document_urioutput_dir to a testdata/json-schemas directory to keep schemas organisedCall fetch_asm_document with one of the asm_data_instance_examples URIs, then read the file.
Constraints:
$asm.manifest value, top-level aggregate document key, and measurement document structureRead the instrument data file and extract all metadata and measurement values.
Constraints:
(row_label, column_label, value) tuples+00:00)Checksum)Implement a Python script that reads the source data and writes a conformant ASM JSON file.
Refer to → CUSTOM-CONVERTER-REQUIREMENTS.md for additional requirements about custom converter files.
Constraints:
ASM file identifier on each run<column><row> identifiers (e.g. column A, row 1 → A1)input_path and output_path as optional CLI arguments with sensible defaultsExecute the script against the source data to produce the ASM JSON output file.
Constraints:
_map.json field mapping file is also produced alongside the _asm.json file (per CUSTOM-CONVERTER-REQUIREMENTS.md section 6)Call validate_asm_schema with the generated JSON and the schema path from Step 2.
Constraints:
asm_document_pathasm_schema_pathis_valid is true and errors is empty before considering the task completeCall validate_field_map with the _map.json file produced in Step 6.
Constraints:
_map.json file path as field_map_pathmismatches array in the result; each entry identifies a field whose source and ASM values divergemismatches list as a signal to update the converter script, EXCEPT for intentional divergences such as timestamp normalisation (ISO 8601 conversion) and device identifier extraction, which are documented as acceptable in CUSTOM-CONVERTER-REQUIREMENTS.md section 5.5input_path: tests/testdata/plate_reader_weyland_yutani_instrument_data.csv
asm_model: plate-reader
output_path: tests/testdata/plate_reader_weyland_yutani_instrument_data.asm.jsonExpected outcome:
tests/testdata/json-schemas/...plate-reader.embed.schemaconvert_plate_reader_csv.pyvalidate_asm_schema returns {"is_valid": true, "errors": []}validate_field_map reports only the expected intentional mismatches (Instrument serial-number extraction + Recorded timestamp normalisation)Timestamp parse error Some instruments write timestamps as YYYY-MM-DD:HH:MM:SS (colon between date and time). Normalise with a regex substitution before calling datetime.fromisoformat.
Well identifier ordering Source data may lay out columns as headers and rows as the first cell of each data row. Assemble the well ID as <column_letter><row_number> (e.g. A1), not the reverse.
Schema validation errors on `unit` The plate-reader schema requires absorbance values to use unit mAU. Using AU or omitting the unit field will cause a validation failure.
`fetch_asm_document` saves to a nested path The tool mirrors the URI path under output_dir, which can produce a double-nested directory (e.g. json-schemas/json-schemas/...). Record the exact path returned by the tool and use that path verbatim in the validate_asm_schema call.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.