Skip to content
CAI
Software that uses CAICheck a score

nfdi4plants/ARCtrl

56.7

Adequate · 3 October 2026

42.6k

lines of production code

F#

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

ARCtrl is a cross-platform library for managing Annotated Research Contexts, enabling the creation, manipulation, and serialization of experimental metadata across .NET, JavaScript, and Python. It provides comprehensive support for ISA-Tab and RO-Crate standards, allowing users to parse and export investigations, studies, assays, and runs via spreadsheets, JSON, and YAML. The system also handles Common Workflow Language (CWL) definitions, offering tools to model, resolve, and visualize workflow execution graphs.

How it got here

2021–2024 — multi-language platform restructuring

56 changes.

The project was restructured and renamed to ARCtrl, establishing a unified multi-language platform supporting .NET, JavaScript, and Python via a FAKE-based build system. Core domain models for ARC, file systems, and ISA-Tab metadata were rewritten to ensure cross-platform consistency and ISA-JSON compliance. Comprehensive test suites and serialization layers were added to validate the new architecture across all supported runtimes.

2025–2026 — RO-Crate and WorkflowGraph implementation

15 changes.

This period focused on implementing core RO-Crate serialization and conversion capabilities, including JSON-LD support and the mapping of experimental units like Assays and Studies. It also introduced the WorkflowGraph library to model, analyze, and visualize Common Workflow Language (CWL) structures as directed graphs with Mermaid output. Comprehensive test coverage was added for these new features, alongside updates to Datamap handling and dependency references.

Features

Add JSON serialization extensions for Process domain models

New F\# extension modules have been added to the \src/ARCtrl/JsonIO/Process\ directory to provide JSON serialization capabilities for Process-related domain entities. These files implement \fromISAJsonString\ and \toISAJsonString\ methods for types including Component, Factor, FactorValue, Material, MaterialAttribute, MaterialAttributeValue, MaterialType, Process, ProcessInput, ProcessOutput, ProcessParameterValue, ProcessSequence, Protocol, ProtocolParameter, Sample, Source, and ScalarValue. Additionally, several types (Component, Material, MaterialAttributeValue, Process, ProcessOutput, ProcessParameterValue, ProcessSequence, Protocol, Sample, Source) now support ROCrate JSON serialization via \fromROCrateJsonString\ and \toROCrateJsonString\ methods. The \StudyMaterials\ module provides a write-only ISA JSON encoder for aggregating sources, samples, and materials.

src/ARCtrl/JsonIO/Process · high confidence

Add JSON-LD serialization support for ROCrate

Introduces new modules (LDContext, LDGraph, LDNode, LDRef, LDValue) to handle encoding and decoding of JSON-LD structures within ROCrate. This enables the library to correctly parse and generate complex JSON-LD graphs, including support for null values, boolean properties, and context proxies for versions 1.1 and 1.2.

src/Json/ROCrate · high confidence

Add YAML serialization for Validation Packages

Users can now serialize and deserialize ValidationPackage and ValidationPackagesConfig models to and from YAML strings. This new capability in the ARCtrl.Yaml module uses the YAMLicious library to provide encoder/decoder logic that mirrors the existing JSON implementation, allowing configuration data to be stored in YAML format.

src/Yaml · high confidence

Add compressed JSON serialization for ArcTable and Template

New files in the ArcTable JSON IO module introduce compressed JSON serialization capabilities for ArcTable and Template objects. This includes dedicated encoder/decoder logic that utilizes shared string, ontology annotation, and cell tables to reduce payload size, along with helper modules for compression and specific type extensions (CompositeCell, CompositeHeader, IOType) to support the broader table structure.

src/ARCtrl/JsonIO/Table · high confidence

Add cross-platform HTTP request support for JavaScript and Python targets

The WebRequest module now supports Fable compilation to JavaScript and Python, in addition to the existing .NET and browser targets. For JavaScript, it detects Node.js environments to use \isomorphic-fetch\ for downloading files, while falling back to standard browser HTTP for other JS contexts. For Python, it wraps the \requests\ library to provide equivalent GET, POST, PUT, DELETE, HEAD, and OPTIONS capabilities. This allows the application to perform web requests consistently across all supported Fable compilation targets.

src/ARCtrl/WebRequest · high confidence

Added and updated logos in the creation section

New SVG assets have been added to the logos/creation directory, including ARC.svg, HandCleaned.svg, HandNoString.svg, and HandWithString.svg, alongside an update to image.svg. These changes introduce new visual assets for the creation workflow, specifically adding the ARC logo and refined versions of the Hand logo.

logos · high confidence

Introduce ARC contract handling for ISA entities, workflows, and configuration

The \src/Contract\ module now provides contract definitions for managing ISA Investigation, Study, Assay, and Run entities, as well as Workflows, Datamaps, Licenses, and ValidationPackagesConfig. Users can now create, update, and delete contracts for these resources, with support for CWL descriptions in Runs and Workflows, and YAML-based configuration for ValidationPackages.

src/Contract · high confidence

Introduce ARC model with RO-Crate serialization and cross-platform async I/O

The \src/ARCtrl\ module now provides a unified \ARC\ class that manages the in-memory representation of an Annotated Research Context and its synchronization with the file system via a contract system. Users can serialize and deserialize ARC objects to and from RO-Crate JSON format using the new \ROCrateIO\ module, which handles metadata, licenses, and entity conversion. The library also introduces cross-platform asynchronous I/O support via \CrossAsync\, enabling consistent async operations across JavaScript, Python, and .NET backends, and exposes controllers for JSON, XLSX, and YAML parsing to facilitate data import and export.

src/ARCtrl · high confidence

Introduce ARCtrl.Contract module for file operation definitions

Added the ARCtrl.Contract module (src/Contract/Contract.fs) which defines the core data structures for describing file operations within the application. This includes the DTOType enum for identifying file formats (such as ISA spreadsheets, JSON, and CLI tools), the DTO union type for holding file content, and the Contract record type which specifies the operation (CREATE, UPDATE, DELETE, READ, EXECUTE, RENAME), target path, and associated data. Static factory methods are provided to construct these contracts, enabling a structured way to communicate file I/O and tool execution intents.

ARCtrl.Contract · high confidence

Introduce CWL model and processing unit abstractions

The CWL module now exposes a unified CWLProcessingUnit discriminated union that groups CommandLineTool, Workflow, ExpressionTool, and Operation descriptions, providing consistent static accessors for inputs, outputs, requirements, hints, and intent across all variants. Supporting this are new type definitions in CWLTypes.fs (including FileInstance, DirectoryInstance, and SchemaSaladString), dedicated description models for expression tools and operations, and helper modules for dynamic object property handling, hashing, and YAML encoding that ensure correct serialization and equality semantics for CWL objects.

src/CWL · high confidence

Introduce CWL workflow step input and output models

The ARCtrl.CWL module now includes explicit type definitions for CWL workflow steps, specifically the StepInput and StepOutputParameter models. These types expose fields required by the Common Workflow Language specification, such as source connections, default values, link merge methods, pick value strategies, and scatter methods, enabling the system to accurately represent and process complex workflow step configurations.

ARCtrl.CWL · high confidence

Introduce Datamap serialization and spreadsheet table support

Added new modules for handling Datamap data structures, including JSON serialization/deserialization in src/Json/Datamap and spreadsheet table parsing/writing in src/Spreadsheet/DatamapTable. Users can now read and write Datamap tables from ISA-Tab style spreadsheets, with automatic handling of data contexts, ontology annotations, and custom comments.

src/Json/Datamap, src/Spreadsheet/DatamapTable · high confidence

Introduce FileSystem module with path helpers and default contracts

The new src/FileSystem module provides core utilities for managing ARC file structures. It includes the ArcPathHelper for cross-platform path normalization (handling separators, drive prefixes, and resolving relative paths), a FileSystemTree type for representing and manipulating directory hierarchies, and predefined default content for .gitignore (macOS, Windows, Linux rules), .gitattributes (LFS for dataset folders), and license files.

src/FileSystem · high confidence

Introduce ValidationPackage and ValidationPackagesConfig models

Added the core data models for validation packages: \ValidationPackage\ (holding name and version) and \ValidationPackagesConfig\ (holding a collection of packages and an optional ARC specification). These types provide mutable properties, structural equality checks, and Python-compatible string representations to support validation configuration handling.

src/ValidationPackages · high confidence

Introduce WorkflowGraph library for CWL-based workflow analysis and visualization

The new \src/WorkflowGraph\ module provides a deterministic, queryable graph model derived from Common Workflow Language (CWL) processing units. It introduces adapters to convert ARC domain objects (\ArcWorkflow\, \ArcRun\, \ArcInvestigation\) into graph structures, handling CWL description lookups and run path resolution automatically. The library exposes a public API for building these graphs, querying nodes and edges (such as data flow, containment, and port connections), and visualizing the results as Mermaid diagrams or Markdown. This enables users to inspect the structure of workflows and runs, including nested references and unresolved dependencies, through a standardized graph representation.

src/WorkflowGraph · high confidence

Introduce core FileSystem and Commit data models

The ARCtrl.FileSystem module now exposes the foundational data structures for managing file system state. Users can create and manipulate a FileSystem object, which encapsulates a file tree and a history of commits. The API supports adding individual files, constructing a file system from a list of file paths, merging two file systems (unioning their trees and histories), and creating deep copies of the state.

ARCtrl.FileSystem · high confidence

Introduce core workflow graph model and Mermaid visualization

The ARCtrl.WorkflowGraph library now provides the foundational types and builder logic for representing CWL workflows as directed graphs, along with a Siren-based renderer that outputs Mermaid flowcharts. Users can now construct workflow graphs from CWL processing units using configurable build options (such as expanding nested workflows or enforcing strict reference resolution) and visualize the resulting structure with distinct node shapes and colors for workflows, tools, expression tools, and operations.

ARCtrl.WorkflowGraph · high confidence

New ISA-JSON and RO-Crate serialization for Process domain models

The \src/Json/Process\ module now provides comprehensive JSON serialization and deserialization logic for the entire Process domain model, supporting both ISA-JSON and RO-Crate formats. New encoder and decoder modules have been added for \Process\, \Protocol\, \Sample\, \Source\, \Material\, \Component\, \Factor\, \FactorValue\, \MaterialAttribute\, \MaterialAttributeValue\, \ProcessInput\, \ProcessOutput\, \ProcessParameterValue\, and \ProtocolParameter\. This enables the application to correctly read and write complex experimental workflows, including inputs, outputs, parameters, and material characteristics, in both standardized formats.

src/Json/Process · high confidence

New ISA-compliant spreadsheet parsing for ArcAssay, ArcRun, ArcStudy, and ArcWorkflow

The \src/Spreadsheet\ module now provides full read/write support for ISA-compliant experimental metadata via new \ArcAssay\, \ArcRun\, \ArcStudy\, and \ArcWorkflow\ parsers. Users can now import and export assay, run, study, and workflow metadata from Excel workbooks, with each entity mapped to its own worksheet (e.g., \isa\_assay\, \isa\_run\, \isa\_study\, \isa\_workflow\). The parsers automatically detect and include associated annotation tables and datamaps within the workbook, ensuring that complex experimental designs are preserved during serialization. This replaces the previous ad-hoc handling with a structured, type-safe approach for managing spreadsheet-based metadata.

src/Spreadsheet · high confidence

New JSON serialization extensions for ARCtrl domain models

The \src/ARCtrl/JsonIO\ module now provides a comprehensive set of JSON serialization and deserialization extensions for ArcCtrl domain types, including \ArcAssay\, \ArcInvestigation\, \ArcRun\, \ArcStudy\, \ArcWorkflow\, \Comment\, \Data\, \DataFile\, \Datamap\, \LDNode\, \LDGraph\, \OntologyAnnotation\, \OntologySourceReference\, \Person\, and \Publication\. These extensions enable users to convert domain objects to and from standard JSON strings, compressed JSON strings, ROCrate (JSON-LD) format, and ISA-Tab JSON format. The implementation uses conditional compilation to support multiple target platforms (Python, JavaScript/TypeScript, and .NET) via the Thoth.Json library.

src/ARCtrl/JsonIO · high confidence

New JSON serialization layer for ArcCtrl models

The \src/Json\ directory now contains a comprehensive set of new F\# modules (including Assay, Comment, Data, Investigation, OntologyAnnotation, Person, and others) that implement JSON encoding and decoding for the core ArcCtrl domain models. This new layer supports three distinct output formats: the native ArcCtrl format, RO-Crate (with specific handling for identifiers, contexts, and property mappings), and ISA-JSON (including ID table management for cross-referencing). It also introduces compressed JSON encoding strategies using string and ontology annotation tables to reduce payload size, alongside helper modules for custom decoding logic (such as URI validation and datetime handling for Fable/Python targets) and encoding utilities.

src/Json · high confidence

New RO-Crate conversion logic for Assays, Studies, and Investigations

The \src/ARCtrl/Conversion\ module now includes new conversion files (Assay.fs, Study.fs, Investigation.fs, etc.) that implement the mapping between internal ARC data models and the RO-Crate format. This change adds the capability to compose and decompose Assays, Studies, and Investigations, including handling of data files, fragment descriptors, and person/author information, effectively enabling the export and import of these core experimental units as part of an RO-Crate.

src/ARCtrl/Conversion · high confidence

New spreadsheet metadata parsing for Investigations, Studies, and Templates

The ARCtrl.Spreadsheet module now includes new F\# source files to parse and write ISA-Tab style metadata sheets. ArcInvestigation.fs handles the 'isa\_investigation' sheet, mapping fields like identifier, title, and submission date, while Study.fs manages 'STUDY' sheets including design descriptors and assays. Template.fs introduces support for reading and writing 'TEMPLATE' sheets, including a migration path that maps deprecated column headers (e.g., 'Authors ORCID' to 'Comment\[...\]') to the new schema. These changes rely on a new SparseTable.fs utility for handling sparse row/column data structures within the spreadsheet metadata.

ARCtrl.Spreadsheet · high confidence

New spreadsheet metadata parsing modules for assays, runs, and workflows

Added new F\# modules in src/Spreadsheet/Metadata to parse and serialize ISATab-style spreadsheet data for ArcAssay, ArcRun, ArcWorkflow, Person, Protocol, and Publication entities. These modules handle mapping spreadsheet columns to domain objects, including ontology annotations, comments, and aggregated string fields, enabling the application to read and write structured metadata from spreadsheet files.

src/Spreadsheet/Metadata · high confidence

Repository restructured and renamed to ARCtrl with multi-language support

The project has been restructured and renamed from ARC to ARCtrl, introducing a unified solution that supports .NET, JavaScript, and Python. The solution files (ARCtrl.sln, ARCtrl.Py.sln) now define a comprehensive set of projects including core libraries (ARCtrl.Core, ARCtrl.Contract, ARCtrl.Json, ARCtrl.Spreadsheet, ARCtrl.FileSystem, ARCtrl.CWL, ARCtrl.Yaml, ARCtrl.ROCrate, ARCtrl.WorkflowGraph) and their corresponding test suites. The repository also includes new configuration files such as .editorconfig, .gitignore, and .zenodo.json for metadata and contributors, alongside updated documentation in README.md and RELEASE\_NOTES.md.

(repo-wide) · high confidence

Architecture

Introduce FAKE-based build system for ARCtrl

The project now uses a new FAKE (F\# Make) build script located in the \build/\ directory to manage the build, test, and release lifecycle for .NET, JavaScript, and Python components. This system introduces tasks for transpiling F\# code to JavaScript and Python via Fable, running tests with Vitest (JS) and pytest (Python), and packaging artifacts for NuGet, npm, and PyPI. It also centralizes dependency management for the build tooling itself via \Build.Packages.props\ and a \packages.lock.json\, and supports automated release note generation and publishing to GitHub, NuGet, npm, and PyPI.

build · high confidence

Behavioural changes

ArcTable core rewritten with optimized sparse storage and new cell types

The ArcTable library has been completely restructured to improve performance and data integrity. The internal storage now uses a sparse column representation (ArcTableValues) that automatically compresses constant columns and handles sparse data more efficiently, resulting in significant speed improvements for adding rows, columns, and retrieving data. The data model introduces a new CompositeCell union type with Term, FreeText, Unitized, and Data variants, replacing previous cell structures. To support this, a new IOType enum (Source, Sample, Data, Material) standardizes input/output column handling, and header names like "Raw Data File" are now normalized to "Data". Additionally, the system enforces unique table names within an ArcTables collection and includes robust hash collision handling for the Python runtime.

src/Core/Table · high confidence

Core domain model restructured with new ArcRun, ArcWorkflow, and Datamap types

The core library has been reorganized to introduce dedicated types for workflow and run management (ArcWorkflow, ArcRun) and a new Datamap structure for handling data contexts, replacing the previous flat table-based approach. This change also standardizes data file type labels to 'Data' in column headers, refactors ontology annotation handling for better hash consistency, and updates path resolution logic to ensure data file paths are absolute relative to the ARC-Root.

src/Core · high confidence

Expanded ISA-Tab to RO-Crate context mappings

The JSON serialization logic for RO-Crate exports now includes comprehensive context mappings for ISA-Tab entities, ensuring that fields such as assay data files, study titles, and person details are correctly mapped to Schema.org and Bioschemas properties. This change adds context definitions for investigations, studies, assays, samples, materials, protocols, and processes, which resolves previous issues where fields like additionalProperties were lost during write-read cycles and ensures the conformsTo metadata is correctly mapped.

ARCtrl.Json · high confidence

Expanded RO-Crate type definitions and property handling

The \src/ROCrate/LDTypes\ module has been restructured to include new type definitions for \Comment\, \ComputerLanguage\, \CreateAction\, and \DefinedTerm\, while significantly enhancing existing types like \ComputationalWorkflow\, \CreativeWork\, and \Dataset\. This update introduces stronger typing for CWL parameter values, adds support for automatic workflow and run profile exports, and ensures that creators and \dateCreated\ are correctly written to \WorkflowProtocol\. Additionally, default \programmingLanguages\ are now included in RO-Crate exports, and fixes address issues with \sdDatePublished\ key naming and the preservation of arbitrary date strings during conversion.

src/ROCrate/LDTypes · high confidence

Introduce new LDNode-based ROCrate data model and context handling

The ROCrate module has been refactored to use a new, strongly-typed data model built around LDNode, LDRef, LDValue, and LDGraph classes, replacing the previous ROCrateObject/LDObject naming and inheritance structure. This change introduces dedicated classes for managing JSON-LD contexts (LDContext) with term resolution and mapping, and provides a new ArcROCrateMetadata class that explicitly conforms to RO-Crate 1.1. The update also includes helper extensions for DynamicObj to handle property casting and array resizing across Fable/Python backends, and adds a comprehensive context term definition file for Schema.org 1.2.

src/ROCrate · high confidence

Introduces cross-platform async file I/O for contract management

The ContractIO module now performs all file system operations asynchronously, supporting .NET, JavaScript (Node.js), and Python runtimes. This change enables reading and writing ISA contracts (spreadsheet and text formats) and handling operations like create, update, delete, and rename without blocking the main thread, with a safeguard to prevent overwriting .gitkeep files unless explicitly forced.

src/ARCtrl/ContractIO · high confidence

New ArcTable module for structured ISA-Tab annotation parsing and writing

This change introduces a new \ArcTable\ module within the \src/Spreadsheet/AnnotationTable\ location, providing a complete implementation for reading and writing ISA-Tab annotation tables. The new code replaces previous ad-hoc parsing with a structured approach using \CompositeHeader\, \CompositeColumn\, and \CompositeCell\ types to handle complex column hierarchies (such as Input/Output, Protocol, and Parameter groups) and their associated metadata (like Term Source REF and Accession Numbers). It includes logic to fix deprecated IO header formats, group columns by header type, and efficiently serialize/deserialize data to and from spreadsheet worksheets using the \FsSpreadsheet\ library.

src/Spreadsheet/AnnotationTable · high confidence

New core helper modules for collections, identifiers, hashing, and URI parsing

The \src/Core/Helper\ area now includes a suite of new utility modules that standardize data handling and parsing across the application. \Collections.fs\ provides specialized sequence, option, and dictionary helpers, including Python-compatible dictionary initialization to resolve Fable transpilation issues. \Identifier.fs\ introduces robust validation and path-generation logic for assay, study, workflow, and run identifiers, ensuring consistent file naming conventions. \HashCodes.fs\ implements cross-platform (Fable/Python/JS/.NET) string and object hashing to prevent collisions in the Python runtime. \Regex.fs\ centralizes regex patterns and active patterns for parsing ISA-tab column headers, while \Url.fs\ adds a configurable URI parser for ontology annotations. These changes improve data integrity, parsing accuracy, and cross-platform consistency for core metadata operations.

src/Core/Helper · high confidence

Recursive resolution of CWL workflow step run references

The ARCtrl module now includes a new resolver (CWLRunResolver) that recursively resolves CWL workflow step run references. When processing a workflow, the system looks up relative paths for nested steps, caches the resolved processing units to handle reuse, and updates the workflow structure in-place. This ensures that external workflow definitions referenced via run paths are correctly identified and integrated during execution.

ARCtrl · high confidence

Reworked ArcTable JSON serialization and deserialization logic

The JSON handling for ArcTable, CompositeCell, CompositeHeader, and Template has been updated to support a new, more efficient compressed format alongside the existing standard format. The new implementation introduces dedicated encoder and decoder modules for cell, ontology annotation, and string tables to optimize storage size, while maintaining backward compatibility by automatically detecting and parsing the legacy 'values' structure in ArcTable JSON. This change affects how table data is serialized and deserialized, ensuring robustness against mutability issues and supporting compressed representations for better performance.

src/Json/Table · high confidence

Reworked core data model and serialization for ISA-JSON compliance

The ARCtrl.Core library has been significantly restructured to improve transpiled JavaScript output and align with ISA-JSON standards. This change introduces a new type system where values are explicitly represented as \ScalarValue\ (replacing the previous \PropertyValue\ naming convention) and introduces dedicated types for process elements such as \Component\, \Factor\, \FactorValue\, \Material\, \MaterialAttribute\, \MaterialAttributeValue\, \Process\, \ProcessParameterValue\, \Protocol\, \ProtocolParameter\, \Sample\, and \Source\. Serialization logic has been updated to use \toStringObject\ for generating ISA-JSON compatible strings, and new helper modules like \SemVer\ and \Comment\ have been added to support versioning and metadata handling. These changes affect how experimental data, protocols, and process steps are modeled and serialized within the core library.

ARCtrl.Core · high confidence

Test coverage

Added CWL test fixtures for parsing and validation; Added Cypress UI tests for Vue components; Added JSON serialization tests for ArcTable, Assay, and core data models; Added JSON test fixtures for ISA-Tab and RO-Crate entities; Added JavaScript unit tests for ARCtrl components; Added Python unit tests for ArcCtrl components; Added SimpleARCWithCWL test fixture for ProteomIQon workflow validation; Added Web Bundling test project; Added YAML serialization tests for ValidationPackage and ValidationPackagesConfig; Added comprehensive test suite for ARCtrl core components; Added comprehensive test suite for CWL decoding and encoding; Added comprehensive test suite for WorkflowGraph; Added comprehensive unit tests for spreadsheet parsing and writing; Added core unit tests for ArcCtrl data models; Added performance testing framework for ArcTable operations; Added speedtest benchmarks for ArcTable operations; Added test contracts for ISA spreadsheet objects; Added test coverage for JSON Process and ProcessInput modules; Added test coverage for ROCrate JSON-LD parsing and serialization; Added test fixtures for ARC RO-Crate prototypes; Added test fixtures for IO contract and path sub-path finding; Added test fixtures for ISA-Tab spreadsheet metadata; Added test fixtures for SimpleARC IO validation; Added test fixtures for SimpleARCWithWR workflow and run contract handling; Added tests for FileSystemTree operations; Added tests for JSON decoder and validation logic; Added tests for JSON schema validation across .NET and JavaScript targets; Added tests for ValidationPackagesConfig extension methods; Added unit tests for ROCrate LDContext and LDNode components; Added unit tests for ValidationPackage and ValidationPackagesConfig; Consolidated test runner for all test suites; New test utilities and test object fixtures for cross-platform testing.

Dependencies

Updated .doc-scan subproject references

The .doc-scan directory has been updated to point to new commits for its constituent submodules, including ARCitect, Swate, arc-export, arc-validate-package-registry, arcCommander, brapi2arc, elab2arc, knowledgebase, and mira. This change reflects the underlying dependency updates mentioned in the commit message, ensuring the documentation scanning tools use the latest versions of these internal components.

.doc-scan · high confidence

Upgrade to .NET 8 and Fable 5 with centralized dependency management

The project has upgraded its build infrastructure to .NET 8 and Fable 5, enabling transpilation to both JavaScript and Python. Dependency management is now centralized via Directory.Packages.props, and key libraries have been updated: FsSpreadsheet to 7.0.1, DynamicObj to 8.0.0, and YAMLicious to 1.0.0. The Python runtime requirement is now Python 3.12+, and the JavaScript build tooling has shifted to Vite 7 and Vitest 3.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 58 → 57 (-1.3)
  • Rubric changed (rubric-2026.09.15 → rubric-2026.10.1) — scores are not directly comparable.

Lenses

  • Code Health 74 → 74 (-0.0)
  • Architecture 99 → 90 (-8.9)
  • Maturity 63 → 63 (+0.2)
  • Readiness 49 → 49 (-0.4)
  • Security 59 → 62 (+2.9)
  • Performance 60 (new)

Resolved (12)

  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (poetry.lock)
  • Hotspot: src/CWL/CWLTypes.fs (src/CWL/CWLTypes.fs)
  • Hotspot: src/CWL/Decode.fs (src/CWL/Decode.fs)
  • Hotspot: src/Core/Conversion.fs (src/Core/Conversion.fs)
  • Members sharing a duplicated core (4 members, 50+ identical tokens) (src/ARCtrl/Conversion/Assay.fs)
  • Members sharing a duplicated core (4 members, 50+ identical tokens) (src/Spreadsheet/ArcInvestigation.fs)
  • Members sharing a duplicated core (7 members, 50+ identical tokens) (src/Spreadsheet/Metadata/Assays.fs)
  • Off-boarding risk: anonymized user #1
  • Off-boarding risk: anonymized user #2

New (69)

  • Documentation: no contributor guidance (README.md)
  • Documentation: no project overview (README.md)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (poetry.lock)
  • High CVE: [GHSA redacted] (uv.lock)
  • Members sharing a duplicated core (4 members, 50+ identical tokens) (src/ARCtrl/Conversion/Assay.fs)
  • Members sharing a duplicated core (4 members, 50+ identical tokens) (src/Spreadsheet/ArcInvestigation.fs)
  • Members sharing a duplicated core (7 members, 50+ identical tokens) (src/Spreadsheet/Metadata/Assays.fs)
  • Off-boarding risk: anonymized user #1
  • Off-boarding risk: anonymized user #2
  • Outdated (npm): @fast-csv/format
  • Outdated (npm): @fast-csv/parse
  • Outdated (npm): @fslab/fsspreadsheet
  • Outdated (npm): @nfdi4plants/arctrl
  • Outdated (npm): @nfdi4plants/exceljs
  • Outdated (npm): @types/node
  • Outdated (npm): archiver
  • Outdated (npm): archiver-utils
  • …and 49 more

Changes since last survey

  • 3 commits — 3 feature/other, 0 fixes

By area

  • (root) — 3 commits

Notable commits

  • change: bump to 3.2.1
  • change: bump to 3.2.2
  • change: update fable dependencies

Architecture

  • Unchanged — 0 containers · 10 contexts · 14 edges

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

nfdi4plants/ARCtrl was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 3 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit b779e302c760f560ddc13bba69b0a97b1f4501d9 — the exact code this score is about.
  • Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-8fe32cd45d00.