Status: ACTIVE (2026-08-27). This is the single authoritative implementation plan for the repository. Historical plans are retained in place and classified in the plan registry. The state-artifact and ARC-native provenance model was clarified on 2026-08-27 before persistence work began.
The repository already reads, writes, crawls, stores, and maps INSDC metadata into a useful proof-of-concept property graph. The next objective is to turn that proof of concept into a target-neutral intermediate representation that can be persisted and curated inside an ARC:
- F1 ingests source metadata into one initial immutable ArcIR state artifact.
- Curation processes consume a selected state artifact and generate a new immutable state artifact while preserving fragment-level provenance.
- F2 compiles a selected ArcIR state into target artifacts without changing the IR.
- The curation ARC's native process graph records every process and its designated input and output entities. In an ISA-formatted ARC these are ordinary process rows, not a parallel BioFSharp provenance format.
The design of this system is itself an ARC. Source XML, SSSOM mapping sets, diagnostic reports, immutable ArcIR state files, and generated target files are ordinary artifacts connected through the ARC process graph. Transformation semantics are identified by terms from a small versioned ontology and represented in the ARC's native process model; there is no standalone transformation-record text format.
source artifacts + SSSOM --F1 process--> ArcIR state 0 --curation process*--> selected ArcIR state --F2 process*--> target artifacts
- Immutable complete IR states. F1 and every completed curation transaction generate a new, complete
*.arcir.jsonartifact at a new immutable path. Earlier states remain in the ARC. Filenames use stable process IDs, digests, or another opaque scheme rather than requiring sequential numbers; the native ARC process graph establishes succession and the selected F2 input. - No
ArcDocumentdomain envelope.ArcIRis the in-memory graph. Its JSON root is only the persistence boundary{ "formatVersion": "1.0", "graph": ... }; process history and reports do not live in it. - No embedded diagnostics. F1, curation, and F2 use one
Diagnostic/DiagnosticReportmodel. Reports are sibling artifacts generated by processes, so later validation cannot mutate an older IR state. - No patch chain as authority. Every state is independently loadable. Git diffs remain useful for review and patches may be exported as derived conveniences, but replaying patches is never required to reconstruct a state.
- Fragments designate occurrences; processes establish provenance. A selector is meaningful only with the immutable artifact path and digest, plus an optional Git commit for resolution. That pair designates an existing entity or value occurrence. A native ARC process relates designated inputs to generated outputs; the process topology establishes an output entity's identity by provenance, while a selector designates its persisted representation.
- Stable IRI identity for curatable units. Objects, type assertions, properties, relations, annotations, diagnostics, and reports that can be curated or referenced independently use the same validated absolute
Iri/URN identity type and are serialized as keyed maps, not positional arrays. Their containing map or typed navigation case supplies the role; parallel nominal wrappers such asAssertionIdandRelationIdare not introduced unless a role later acquires genuinely different validation semantics. - Scalar occurrences are designated, not intrinsically identified.
ArcValueandAnnotationValueliterals do not gain IDs. Their occurrence is addressed through the containing immutable ArcIR artifact and a typed JSON Pointer. A repeated value that must be curated independently is represented as its own identified assertion;ArcValue.Listremains atomic. - SSSOM contains reusable semantic mappings only. Extraction paths, parsing, splitting, graph construction, identifier minting, record-specific execution, and provenance do not belong in mapping rows. Fragment selectors designate native process inputs and outputs, transformation ontology terms identify process semantics, protocols and parameters carry execution details, and native process topology expresses provenance. Mapping sets may be partial; an unmapped local term remains valid ArcIR state without a placeholder row.
- F1 runs once per curation lineage. Later corrections are explicit curation processes. A materially new source import starts an explicit new lineage; it does not silently replace curated work.
- F2 is repeatable and non-mutating. It consumes one exact ArcIR state artifact and generates target artifacts, native ARC process entries, and a diagnostic report. This roadmap defines the interface but no concrete F2 target.
- Breaking changes are accepted. There is no compatibility facade for the proof-of-concept ArcIR API or its current HTML export.
- Local terms remain legitimate. An unmapped INSDC or curation-created domain term is preserved as a stable local term and diagnosed; absence of an external ontology match does not make the IR invalid.
- The first workbench is read-only. Editing and committing curation actions through the UI belong to a later phase after the curation library and native ARC process integration are stable.
- Terms are shared graph-level definitions.
ArcIRowns aTerms: Map<Iri, OntologyTerm>registry. Types, predicates, term-valued assertions, annotation properties, and units reference a term by IRI rather than embedding repeated term records. The registry describes terms actually used by the graph; it is not a bundled ontology, and conflicting definitions are merge conflicts rather than last-writer-wins updates. - No parallel provenance serialization. Any in-memory addressing or operation helpers must translate into the ARC's native process model. For an ISA-formatted ARC, transformations become ISA process rows with designated inputs and outputs and ontology-typed protocols or parameters; they are not persisted as BioFSharp-specific transformation records.
- ArcIR mapping is format-neutral; SSSOM loading is an adapter.
BioFSharp.ArcIRdefines only neutral mapping claims and an additive graph-enrichment process.BioFSharp.INSDC.ArcIRmay referencePolyglotSSSOMto parse and validate versioned SSSOM artifacts and project their rows into those neutral claims, but noPolyglotSSSOMtype enters the ArcIR graph model or the neutral mapper API. The top-level application still owns claim selection, conflict policy, and recording used mapping artifacts and records as native ARC process inputs.
Status: COMPLETE (2026-08-24). The pre-change inventory is recorded in
phase-1-baseline.md. The FAKERunTestsacceptance path now includes dependency auditing and generated-artifact drift checks.
Complete this phase before changing the ArcIR model so failures introduced by the redesign are distinguishable from existing debt.
- Establish a green FAKE build/test baseline and record the SDK, tool, package, and test counts.
- Resolve current package vulnerability warnings, beginning with the vulnerable
SQLitePCLRaw.lib.e_sqlite3dependency, while retainingnetstandard2.0for shipped libraries andnet8.0for the crawler. - Add a CI/FAKE dependency-audit gate with an explicit, reviewed suppression mechanism rather than accepting warning-only restores.
- Make
regenerateInsdcTypes,generateFragmentSelectors, andgenerateStructuralOntologyreproducible and add a drift-check target that fails when committed generated output differs. - Keep generated C# under
BioFSharp.FileFormats.INSDC/Generated/generator-owned; all naming changes continue throughtypename-substitutions.txt.
- Split the monolithic test file into focused modules without changing coverage or fixture ownership. Keep normal tests offline and live endpoint checks opt-in.
- Add focused SQLite schema, foreign-key, identifier, and per-entity round-trip tests that close the unfinished acceptance work in the historical SQLite plan.
- Document the current package boundaries, crawler exceptions, generator workflow, and IR terminology in package READMEs and XML documentation.
- Remove stale references that still describe the structural decompilation overlay or embedded HTML as the intended final architecture.
- Introduce an explicit SQLite schema version and ordered forward migrations; test a new database and upgrades from every committed schema version.
- Make database writes transactional at the public operation boundary and preserve the crawler's intentional soft-reference behavior explicitly rather than through undocumented foreign-key assumptions.
- Audit crawler retries, cancellation, partial failures, atomic file writes, resume behavior, and malformed upstream responses. Preserve injectable fetch seams and the offline fixture suite.
- Keep R1 and R2 as crawler-materialized raw-artifact formats. They are not F2 implementations and do not require ArcIR.
- The full FAKE build and offline suite pass with generated-artifact drift and dependency-audit gates enabled.
- SQLite has focused migration and round-trip coverage independent of crawler integration tests.
- Public projects have current package documentation and no undocumented warning suppressions.
Status: COMPLETE (2026-08-26).
BioFSharp.ArcIRnow owns the validated, normalized graph model, lossless operations, validation, and persistence contracts.BioFSharp.INSDC.ArcIRis the INSDC-specific F1 adapter, and all eight entity converters plus supplementary ingestion build against the core.
Create a new packable BioFSharp.ArcIR project containing only the graph model, identity/value types, graph operations, validation, and persistence contracts. BioFSharp.INSDC.ArcIR becomes the INSDC-specific F1 adapter and depends on the core. The core must not reference generated INSDC types, INSDC vocabulary, crawler code, SQLite, or any target format.
Use one validated absolute Iri type for every URI-shaped model identity. Do not introduce nominal ArcId, AssertionId, RelationId, AnnotationId, or DiagnosticId wrappers merely to restate the role already expressed by a record field, map, or discriminated-union case.
ArcIR.TermsisMap<Iri, OntologyTerm>, where the map key is the authoritative term identifier and the value carries reusable label/source metadata without duplicating the ID.ArcIR.ObjectsisMap<Iri, ArcObject>.ArcObject.Typesbecomes an IRI-keyed map of type assertions rather than an unaddressable set. Each assertion references its ontology term throughArcIR.Terms.ArcObject.PropertiesbecomesMap<Iri, ArcProperty>.ArcPropertycarries its IRI identity, predicate term IRI, value, and IRI-keyed annotations.- Object annotations become
Map<Iri, ArcAnnotation>; relation annotations follow the same rule. Annotation properties, term values, and units referenceArcIR.Termsby IRI. ArcIR.RelationsbecomesMap<Iri, ArcRelation>, andArcRelation.Idis required rather than optional. Subjects, objects, evidence, source objects, andArcValue.Refalso useIri.- Repeated independently curatable values are separate property assertions.
ArcValue.Listis retained only for an ordered value that is deliberately curated atomically.
F1 mints deterministic absolute IRIs/URNs from the source artifact identity, source selector, mapping/rule ID, and assertion role. Identities are never derived from the current assertion value, so a value edit cannot rename its slot. Curation-created assertions use opaque URI-shaped identities. Existing identities survive unchanged across later states unless an explicit identity-changing process records their replacement.
Replace silent overwrite behavior with explicit operations:
addfails on an incompatible duplicate ID.upsertis available only where replacement is intentional and returns the replaced value.mergereports conflicts rather than selecting a winner silently.- Validation detects missing endpoints, references to missing term definitions, duplicate semantic slots where forbidden, and invalid IRIs. Artifact selector construction and resolution belong to Phase 3 rather than the state-only graph model.
- Convert the current graph builders and all eight INSDC converters to the new maps and required IDs in one breaking change.
- Do not retain aliases or obsolete overloads for the proof-of-concept shapes.
- Add compile-time and golden-fixture tests before deleting the old core types from
BioFSharp.INSDC.ArcIR.
- The target-neutral package builds and tests without an INSDC dependency.
- Every independently curatable graph element has a stable identity.
- Every referenced ontology term has one reusable graph-level definition, and term-definition conflicts are reported explicitly.
- Merging graphs cannot silently lose a property, annotation, or relation.
- All eight current INSDC entity converters build against the extracted core.
Status: COMPLETE (2026-08-27).
BioFSharp.ArcIRnow provides a strict, schema-versioned canonical JSON codec, immutable atomic state writes, SHA-256 artifact revisions, and typed RFC 6901 fragment designations for every selectable graph element and scalar value occurrence. The core suite contains 34 passing tests, including deterministic byte output, exhaustive location resolution, adversarial parsing, create-new concurrency, and a two-state fixture whose stable assertion IRI is unambiguous through artifact-qualified input and output selectors. Transformation vocabulary and native ARC process materialization remain deferred to Phase 6.
Add a reversible, schema-versioned serializer and parser for this normalized root:
{
"formatVersion": "1.0",
"graph": {
"terms": {},
"objects": {},
"relations": {}
}
}"Canonical" describes the wire format, not one mutable file. F1 and each completed curation transaction write a new complete state artifact, for example arcir/states/<opaque-state-id>.arcir.json; an existing state path is never overwritten.
- Commit a JSON Schema for each supported major format version.
- Serialize all addressable collections as objects keyed by stable IDs.
- Order keys deterministically, use invariant scalar formatting and UTF-8, and produce byte-identical output for the same graph.
- Reject unknown major versions; migrate known older versions explicitly before model decoding.
- Write a new state atomically with create-new semantics so interruption cannot leave a truncated artifact and an existing immutable state path can never be replaced.
- Keep process history and transformation semantics outside the graph state.
- Treat GraphML, JSON-LD, and visualization data as derived views, never as authoritative editable state.
Example physical locations are:
#/graph/terms/<escaped-term-iri>
#/graph/objects/<escaped-object-id>
#/graph/objects/<escaped-object-id>/properties/<escaped-assertion-id>
#/graph/objects/<escaped-object-id>/properties/<escaped-assertion-id>/value
#/graph/relations/<escaped-relation-id>
Add neutral addressing types to the core library:
type ArtifactRevision =
{ Path: string
Sha256: string
Commit: string option }
type FragmentSelector =
{ ConformsTo: Iri
Value: string }
type FragmentRef =
{ Artifact: ArtifactRevision
Selector: FragmentSelector }These support types do not add provenance fields, revision history, tombstones, or scalar IDs to the ArcIR state records completed in Phase 2.
Add a separate navigation type to the canonical JSON persistence component. It must cover every independently selectable graph element and every scalar value occurrence that can participate in a transformation, including at least:
type ArcJsonLocation =
| Term of termId: Iri
| Object of objectId: Iri
| TypeAssertion of objectId: Iri * assertionId: Iri
| Property of objectId: Iri * assertionId: Iri
| PropertyValue of objectId: Iri * assertionId: Iri
| ObjectAnnotation of objectId: Iri * annotationId: Iri
| ObjectAnnotationValue of objectId: Iri * annotationId: Iri
| PropertyAnnotation of objectId: Iri * assertionId: Iri * annotationId: Iri
| PropertyAnnotationValue of objectId: Iri * assertionId: Iri * annotationId: Iri
| Relation of relationId: Iri
| RelationProperty of relationId: Iri * assertionId: Iri
| RelationPropertyValue of relationId: Iri * assertionId: Iri
| RelationAnnotation of relationId: Iri * annotationId: Iri
| RelationAnnotationValue of relationId: Iri * annotationId: IriInclude corresponding cases for annotations attached to relation properties. ArcValue.List is selected as one atomic value; there is no positional selector for a list member.
ArcJsonLocation is not part of the ArcIR graph model and is never stored in ArcIR. It is an ephemeral public navigation type used only to construct or validate a designation against one serialized state artifact. This lets a literal with no intrinsic ID be designated as a native process input or output, for example <state artifact>#/.../properties/<assertion>/value.
ArcIRJson.selector is the only component that converts an ArcJsonLocation to an RFC 6901 URI-fragment JSON Pointer. F1, curation, F2, and UI code must not hard-code the wire layout or escaping rules.
Use FragmentRef as an in-memory, format-neutral designation helper for source XML XPointer, RFC 7111 table fragments, ArcIR JSON Pointer, SSSOM mapping-record identity, and diagnostic targets. It does not define provenance or a new on-disk process format. Phase 6 translates designations into native ARC process inputs and outputs.
For persisted boundary entities, a native process records distinct input and output fragment references even when their embedded semantic ID is preserved across state artifacts. Intermediate process entities need not acquire an ArcIR scalar ID merely to participate in the process graph. ArtifactRevision.Commit is resolver metadata and may be absent from an artifact generated in that same commit; immutable path plus SHA-256 digest is sufficient to designate the bytes.
- Semantic and byte-for-byte round trips pass for representative and adversarial graphs.
- Golden files demonstrate deterministic ordering and JSON Pointer escaping for
/,~, Unicode, and URI-shaped IDs. - Every generated
ArcJsonLocation, including literal and term-valued property or annotation values, resolves to exactly one fragment in its declared state artifact. - Attempting to write a state to an existing path fails without changing the existing bytes.
- A two-state fixture demonstrates an updated assertion retaining its IRI while its input and output occurrences remain unambiguous through different artifact-qualified selectors.
Status: COMPLETE (2026-08-27).
ER_ontologiesnow owns the five canonicalINSDCERrecord modules and the five ARC structural ontologies (INVMSO,STDMSO,ASSMSO,AFSO, andAPGSO). The reviewed base SSSOM 1.1 set contains seven profile-scoped exact administrative mappings with stable record IDs. All 11 OBO files in that repository parse as 534 unique terms, every mapping endpoint resolves, and the SSSOM artifact round-trips byte-for-byte throughPolyglotSSSOM. F1 consumption of the base set remains Phase 5 work.
Create two kinds of versioned configuration assets for the integrating application, in this order:
- one canonical OBO-format ontology module per concrete supported INSDC record type; and
- after those source terms are stable, one base SSSOM mapping set containing only reviewed mappings for which the INSDC structural term and endpoint ontology term are known to be semantically equivalent.
The initial ontology scope is deliberately limited to these record types, authored in dependency order:
- Project/BioProject;
- Study;
- Sample/BioSample;
- Experiment; and
- Run.
Each concrete source record type gets its own .obo file. If inspection of the
pulled schemas and ontology repository shows that Project and BioProject, or
Sample and BioSample, are distinct source record types rather than aliases,
keep them as separate modules instead of collapsing their semantics. Analysis,
Submission, Receipt, and other record types remain outside this first ontology
authoring pass.
The initial mapping scope is deliberately conservative. Administrative metadata such as titles, descriptions, people, affiliations, and other clearly equivalent Investigation metadata are good candidates. Similar labels, convenient target shapes, or mappings that require normalization, parsing, splitting, contextual interpretation, or value-level curation are not sufficient for the base set.
- Each structural ontology module describes one INSDC record entity, its fields, and their source semantics. It does not describe transformation processes, XPath execution, graph construction, or provenance.
- Refactor the existing structural vocabulary into canonical
.obosources with stable ontology IRIs, version metadata, stable term IRIs, labels, definitions, and source annotations. Generated views may be derived from them, but are never the editing authority. - Keep record-context-specific concepts distinct even when their source labels are identical. For example, a project title, study title, sample title, experiment title, and run title do not become one structural term merely because the XML uses the same lexical field name.
- Express cross-record relationships with stable references between modules. Do not copy a term into several modules or introduce a shared umbrella ontology in the first pass unless inspection demonstrates a genuine shared source concept.
- Treat the pulled endpoint ontologies as the target vocabulary. Do not copy or silently redefine their terms in the INSDC ontology.
- Keep the ARC structural ontologies in the endpoint repository as their editing
authority. Copies embedded or packaged by
ARCTokenizationare synchronized compatibility snapshots, not independent ontology sources. - The base SSSOM file maps structural terms to endpoint terms. Its first version is primarily term-to-term structural mapping; literal and controlled-value mappings are added only when separately justified.
- Give every mapping row a stable URI-shaped record ID and retain mapping-set metadata, mapping predicate, justification, creators, and version information.
- Keep the set intentionally partial. An absent row means "not mapped yet" and
creates no placeholder.
sssom:NoTermFoundis reserved for an explicit curated conclusion that no matching term exists. - Extraction selectors, normalization instructions, record-specific execution, and ARC provenance never appear in the ontology or SSSOM rows.
All reusable structural mappings still hard-coded in converters for the in-scope record types, plus reusable claims formerly expressed by the removed generated structural ontology, become candidates for the reviewed base mapping. Extraction itself remains explicit typed converter logic.
These assets do not introduce a PolyglotSSSOM dependency in the ArcIR core.
The INSDC integration layer may depend on one exact PolyglotSSSOM revision to
load, validate, and resolve mapping rows into format-neutral claims. Generic SSSOM
format fixes remain upstream; no fallback TSV parser or generic SSSOM validator is
added here. Pin the published PolyglotSSSOM package to the exact reviewed
version rather than depending on a mutable sibling checkout.
- Inspect the endpoint ontology repository, source schemas, existing structural vocabulary, namespaces, and release conventions.
- Inventory the terms currently minted or hard-coded by the Project/BioProject, Study, Sample/BioSample, Experiment, and Run converters.
- Define the module/file naming scheme, ontology IRIs, term namespace, identifier policy, versioning policy, and cross-module reference rules.
- Author and validate the Project/BioProject module, then Study, Sample/BioSample, Experiment, and Run, without changing source meaning merely to resemble a target ontology.
- Review the completed source definitions against the endpoint ontology terms.
- Only then draft and review the conservative base SSSOM mapping set for obvious exact administrative mappings.
- Canonicalize and validate the ontology and SSSOM artifacts and record the inclusion/deferment review. Add the focused fixture showing how the base mapping configures initial F1 output with the format-neutral seam in Phase 5.
- Every in-scope concrete record type has its own canonical, versioned OBO module and each module passes the chosen ontology validation path.
- Project/BioProject, Study, Sample/BioSample, Experiment, and Run field coverage is explicitly inventoried; out-of-scope record types are not represented by speculative placeholder modules.
- Every term used as the subject of a base mapping has a stable definition whose meaning is supported by the source metadata model.
- Every base row is independently reviewable as an exact semantic mapping to a term from the pulled endpoint ontologies and carries stable record identity and mapping metadata.
- The SSSOM artifact round-trips canonically through
PolyglotSSSOM; no local parser, writer, or conformance implementation is introduced. - Uncertain, contextual, value-level, and not-yet-mapped terms remain absent from the base mapping without making the ontology or a resulting ArcIR graph invalid.
BioFSharp.ArcIRreferences neitherPolyglotSSSOMnor the endpoint ontologies. Phase 5 may add the parser dependency to the INSDC integration layer, but ontology and mapping artifacts remain versioned external inputs rather than embedded runtime vocabularies.
Status: COMPLETE (2026-08-27). The neutral additive mapper, PolyglotSSSOM claim adapter, and occurrence-level accounting now cover every supported F1 input without adding a parallel provenance artifact.
Implemented slices: the shared diagnostic and field-accounting core, neutral additive mapper, PolyglotSSSOM adapter, and artifact-qualified accounting for all eight supported INSDC XML entities are implemented. Their tests resolve source XML XPointers and emitted ArcIR JSON fragments, including the source-assertion handoff to an additive base mapping, the connected BioSample-to-Experiment-to-Run chain, analysis files and references, submission agents, and receipt acknowledgements. Supplementary JATS front matter uses XPointer designations; count-header cells use W3C Data Position Selectors over the exact immutable bytes, so CSV, TSV, and materialized archive entries share one resolvable path. Every emitted output is qualified against and resolved from a persisted ArcIR state, and identical inputs produce deterministic reports and graph fragments.
Replace stage-specific F1Report/F2Diagnostic concepts with one diagnostic model:
type DiagnosticSeverity =
| Info
| Warning
| Error
type Diagnostic =
{ Id: Iri
Code: Iri
Severity: DiagnosticSeverity
Message: string
Targets: FragmentRef list
Related: FragmentRef list }
type DiagnosticReport =
{ Id: Iri
Diagnostics: Map<Iri, Diagnostic> }The producing ARC process establishes whether a report came from F1, curation, validation, or F2; Diagnostic therefore has no stage field. Historical diagnostics are immutable. A later curation process may designate a diagnostic occurrence in its immutable report artifact as addressed, but it never changes that old report or relies on a bare diagnostic ID without artifact context.
Do not introduce TransformationOperation, SourceOutputBinding, TransformationRecord, or an intermediate ProcessIntent persistence contract. Effectful operations become ontology-typed native ARC processes when Phase 6 instruments the F1 execution path directly.
F1 first emits source-faithful assertions using stable INSDC structural terms. A separate format-neutral enrichment pass applies caller-selected mapping claims by adding companion assertions to the same owning object or relation. It never replaces or removes the source assertion and never rewrites its term in place. The graph term registry retains both the source and mapped definitions.
| Source term occurrence | Additive result |
|---|---|
| Object type | A second independently identified type assertion |
| Property or annotation predicate | A companion assertion carrying the same value |
| Relation predicate | A parallel relation with the same endpoints |
| Term-valued assertion | A companion assertion carrying the mapped term value |
The first implementation materializes only equivalence-safe claims such as the
reviewed skos:exactMatch base rows. Broader, narrower, related, literal, and
ambiguous claims remain explicit candidates until application policy authorizes a
specific operation. A mapped assertion ID is deterministic from the source
occurrence and target term, so applying the same claim repeatedly is idempotent.
Generated companion IDs occupy a reserved ArcIR namespace and are not treated as
fresh source occurrences by later mapper passes; replay therefore cannot derive
companion-of-companion assertions.
The neutral application result retains the mapping claim ID and the input/output locations of every added or already-present companion assertion. This is an in-memory execution result, not a persisted transformation log. Phase 6 combines those locations with immutable artifact revisions and the SSSOM record identity to emit native ARC process inputs and outputs.
BioFSharp.INSDC.ArcIR uses PolyglotSSSOM for SSSOM decoding, validation, and
declared CURIE expansion, then projects complete applicable rows into the neutral
claim type. It does not implement another SSSOM parser and does not expose
PolyglotSSSOM model types through the neutral mapper.
- Preserve the stable mapping
record_id, subject, predicate, object, justification, labels, and source metadata needed by the neutral claim. - Return all valid candidate claims; do not silently select among conflicting
records or collapse them to a last-writer-wins
Iri -> Irimap. - The top-level application selects the claims it authorizes. The initial profile selects only the seven reviewed exact rows from the Phase 4 base artifact.
- Missing mappings leave the source assertions untouched. Invalid, unsupported, or ambiguous records produce diagnostics rather than invented expansions.
- Canonical writing and mapping curation continue to use PolyglotSSSOM directly; the graph mapper consumes claims and never writes SSSOM.
- Complete explicit F1 mapping for all eight supported INSDC entities and supplementary paper/count metadata against the new core.
- Give every extraction/emission rule a stable ID.
- For every present source leaf from
xpathEntries, record exactly one field-accounting outcome: emitted, intentionally ignored with a rule and reason, unsupported with a diagnostic, or failed with a diagnostic. - Construct resolvable designations for each source fragment and emitted ArcIR fragment, including literal value occurrences. Keep them separate from diagnostics and do not turn selectors into graph nodes.
- Identify meaning- or representation-changing steps such as trimming changed whitespace, parsing a date, splitting a value, or adding a mapped companion assertion so Phase 6 can type the corresponding native processes. Mere selection and copying must not be padded into artificial operation records.
F1 generates the initial immutable ArcIR state artifact and a diagnostic report. Phase 6 extends the execution path to collect the stable extraction rule, mapping-record designations, transformation terms, and parameters while emitting them directly into the native ARC process model; Phase 5 does not persist or expose an intermediate provenance document.
- Every leaf in each committed eight-entity fixture is accounted for.
- Tests resolve every candidate source and output designation against its declared artifact.
- Repeated F1 execution with identical artifacts, recipe, and resolved mapping context produces semantically identical IR and deterministic IDs.
- The reviewed base mapping fixture loads through PolyglotSSSOM and produces neutral claims without introducing a PolyglotSSSOM dependency in
BioFSharp.ArcIR. - Applying those claims preserves each original INSDC assertion, adds the expected ARC companion assertion on the same owner, and is deterministic and idempotent.
- Conflicting target definitions or assertion identities are reported without returning a partially enriched graph; multiple applicable mapping claims are never resolved by silent precedence.
- Missing mappings, lossy conversions, conflicts, and unsupported fields produce stable diagnostics while preserving usable source information.
- No BioFSharp-specific transformation log or binding document is serialized.
Status: READY FOR OVERARC (2026-08-27). All prerequisites owned outside the integrating application are complete.
ER_ontologiesowns the initial versioned Curation Transformation Ontology (CTRO), andplayground/crawl_arcir.fsxdemonstrates live project crawl, additive base mapping, validation, and canonical immutable-state publication. The remaining work in this phase—mapping policy, curation transactions, native ARC/ISA process emission, validation artifacts, and Git coordination—is owned by OverARC. This repository must not introduce a parallel provenance format or an ARC representation dependency to complete that application work.
Add the top-level integrating application layer that applies typed graph operations, configures F1 from mapping artifacts, and contributes to the ARC's native process model. The process graph, not an ArcIR file or BioFSharp-specific log, is the authority for lineage, agents, software versions, used/generated entities, and process relationships. Use the established representation library for each ARC realization; for an ISA-formatted ARC, emit ordinary ISA assay process rows rather than serializing a parallel provenance document.
Status: COMPLETE (2026-08-28).
ArcIRJson.parseLocationnow round-trips supported typed selectors, andLiteralMapping.applyperforms the immutable, source-preserving selected-literal transformation required by OverARC.
The core accepts an ArcJsonLocation, exact source literal, and already
registered target term. Object and relation string properties, direct literal
annotations, and nested property annotations receive deterministic term-valued
companions. Lists and non-string scalars are deliberately rejected. Compatible
replay is idempotent; missing or changed inputs, unregistered targets, invalid
graphs, and deterministic companion collisions return typed failures without a
partial graph. The primitive has no SSSOM, CTRO, ProcessCore, HTTP, or OverARC
dependency; the application remains responsible for parsing mapping artifacts,
choosing claims, and recording native provenance.
Use the exact PolyglotSSSOM revision introduced by the Phase 5 INSDC adapter and run its upstream acceptance path at that revision. The top-level application owns selection and provenance even though the adapter supplies parsing and claim projection:
- Load and validate the Phase 4 base mapping plus later ARC-owned curated mapping sets through the Phase 5 PolyglotSSSOM adapter.
- Preserve complete mapping claims, including predicates, justifications,
creators, provenance, modifiers, extension metadata, and original documents
required for round trips; never collapse the stored claim to
Iri -> Iri. - Resolve CURIEs only through each mapping set's declared prefix map. Unresolved prefixes and conflicting applicable records produce diagnostics rather than invented expansions or silent precedence.
- Require stable URI-shaped mapping record IDs. Designate a mapping by immutable mapping-set artifact revision plus record ID, never by filename alone, row number, or subject/predicate/object tuple.
- Apply explicit application policy when combining the reviewed base mapping with project-specific curated mappings, then supply the resulting format-neutral context to F1.
- Record each mapping record actually used by F1 or curation as an input to the corresponding native ARC process. Merely loading a mapping set does not imply that every row was applied.
- For literal mappings, keep the literal ID-less. Its ArcIR
FragmentRefdesignates the exact occurrence, while the mapping-set revision and record ID designate the reusable semantic claim.
The ArcIR core gains no PolyglotSSSOM dependency, registry client, remote prefix
resolver, or duplicate SSSOM parser. The INSDC adapter uses only the pinned
PolyglotSSSOM dependency and declared document prefix maps; it adds no remote
resolver or fallback codec.
The initial Curation Transformation Ontology is maintained as
ontologies/CTRO/CTRO.obo in nfdi4plants/ER_ontologies, with its competency
examples beside it. It is the small ontology used by downstream integrations to
identify the semantics of curation and conversion processes. It belongs to the
provenance integration layer, not to the ArcIR graph model, canonical JSON
schema, or fragment-addressing API. CTRO covers lexical normalization,
splitting, parsing, additive semantic mapping application, creation,
replacement, and deletion.
- Give every transformation concept a stable absolute IRI, label, definition, and versioned ontology artifact.
- Distinguish creating or curating a mapping claim from applying an existing mapping claim to an entity or literal occurrence. SEMAPV remains authoritative for mapping-claim creation and review; CTRO supplies mapping-application terms.
- Treat a SSSOM mapping record as an input to a semantic-mapping process. The transformation term says that a mapping was applied; it does not duplicate the SSSOM subject, predicate, object, justification, or provenance.
- Keep delimiters, parse formats, and similar execution details as process parameters rather than minting ontology terms for every parameter value.
- Use the terms in the ARC's native process representation, such as ontology-typed ISA protocols or process parameters. Do not define a transformation-log serialization or make
BioFSharp.ArcIRdepend on this vocabulary.
- F1 native process topology consumes designated source artifacts/fragments and mapping artifacts/records and generates both the initial immutable ArcIR state artifact and its selected output fragments.
- A completed curation transaction consumes one selected immutable ArcIR state artifact and generates a new complete state artifact at a different path. The native process topology records both whole-artifact lineage and the selected input/output fragments that explain fine-grained transformations. Earlier states are never overwritten or removed.
- Each represented transformation uses a CTRO term together with native process inputs, outputs, protocols, and parameters.
FragmentRefis only the library-side designation used to populate those native entities. - An updated assertion may retain its IRI while its input and output are distinguished by different state artifacts. Split, merge, replacement, creation, and deletion use the appropriate input/output cardinality and new IDs where semantic identity changes.
- A scalar literal requires no ID: its artifact-qualified value selector designates the process input. A generated intermediate entity may receive identity from its position in the native process graph even when it is not persisted as an independently identified
ArcValue; if it is persisted in ArcIR, its output fragment is also designated. - Validation runs before commit and generates its own report artifact when findings exist.
- Git groups the new state, SSSOM edits, diagnostics, and native ARC process metadata into reviewable commits. It adds collaboration, integrity, and rollback but does not replace the semantic process graph. No JSON Patch chain is required.
A curation transaction may both correct an instance and add a reusable mapping for future ingests. Keep two transformation semantics distinct:
- Mapping curation consumes the relevant evidence and a prior SSSOM artifact when one exists, then generates a new SSSOM artifact containing a complete mapping record.
- Mapping application consumes the selected ArcIR fragment and the designated SSSOM mapping record and generates the curated ArcIR fragment.
Do not prematurely require these to be one or two rows in every ARC representation. Emit the native process topology that corresponds to the actual curation actions, and allow all resulting process entries and artifacts to be committed together. A pending mapping creates no incomplete SSSOM row; sssom:NoTermFound is used only for an explicit no-match conclusion. Promoting a mapping affects future F1 lineages and does not silently rerun F1 over the currently curated IR.
- CTRO competency examples cover one-to-one, one-to-many, literal-to-term, creation, replacement, and deletion without defining a custom provenance document.
- The Phase 4 base mapping is loaded through the Phase 5 INSDC adapter at its
pinned
PolyglotSSSOMrevision and configures exact administrative mappings during initial F1 without entering the ArcIR core dependency graph. - An ISA-formatted fixture ARC demonstrates F1, an assertion update, a one-to-many split, a literal-to-term mapping, mapping curation, and validation using native process rows.
- Every input and output designation resolves in its declared immutable artifact; deleted or replaced IDs remain resolvable in the process input state.
- Reverting a commit restores the exact set of ArcIR/SSSOM/diagnostic artifacts and native process metadata that preceded it.
- The native process graph can answer which source fragment, transformation term, mapping record, curator, and process produced any selected assertion.
- No BioFSharp-specific transformation-record artifact or parallel provenance graph is written.
Status: TRANSFERRED TO OVERARC (2026-08-27). F2 orchestration selects an immutable state, a target profile, native ARC process metadata, and generated artifacts, so the concrete boundary belongs to the integrating application.
BioFSharp.ArcIRremains the target-neutral state and fragment API and gains no ARC- or target-specific dependency for this phase.
Define a target-neutral compiler contract, a target-profile contract, and test doubles; do not implement an ARC, RO-Crate, ISA, readiness-level, or other concrete F2 output profile in this roadmap. The compiler reuses the Phase 6 ARC integration only to record F2 provenance in the curation ARC's native process graph.
An F2 compiler:
- consumes one exact immutable ArcIR state artifact plus an immutable target profile or recipe;
- validates profile preconditions without mutating the IR;
- generates one or more target artifacts and the common diagnostic report;
- contributes native ARC process entries whose designated inputs are the selected ArcIR fragments and whose designated outputs are the generated target fragments;
- identifies transformation semantics with CTRO rather than a custom F2 record format;
- is deterministic for identical inputs unless the profile explicitly declares a nondeterministic dependency.
F2 can run repeatedly for different profiles or after later curation commits. It never generates a new IR state merely because target validation found a problem; any resulting correction is a separate curation process.
- A test compiler proves the interface with multi-file output, warnings/errors, native ARC input/output process entries, and deterministic reruns.
- The Phase 6 fixture can select any immutable ArcIR state as F2 input and resolve every generated target binding through the native process graph.
- F1, curation, validation, and F2 reports deserialize through the same diagnostic schema.
- No target-specific types or dependencies enter
BioFSharp.ArcIR.
Status: TRANSFERRED TO OVERARC (2026-08-27). The maintained frontend now belongs to OverARC. The BioFSharp playground HTML writer remains only a low-effort inspection aid and is not a second workbench implementation.
Create the read-only React/TypeScript/Vite workbench in OverARC, using pinned stable Sigma v3, Graphology, and React Sigma packages. It reads one or more immutable .arcir.json state artifacts plus optional diagnostic and SSSOM artifacts and the native ARC process graph through shared, schema-validating loaders.
- Search and filter by object kind, type, predicate, source artifact, mapping record, diagnostic severity/code, and process/state.
- Use stable object/relation/assertion IDs for selection and deep links.
- Show a detail inspector for properties, annotations, provenance, source/output fragment references, mappings, diagnostics, and process history.
- Provide state and process views that explain what changed and why; use immutable ArcIR artifacts, native ARC process data, and Git rather than inventing history from the selected graph.
- Distinguish missing endpoints and invalid fragments visually instead of silently dropping them.
- Keep layouts deterministic where practical, move expensive layout work off the UI thread, and degrade gracefully for large graphs through filtering and progressive detail.
- Support keyboard navigation, accessible color/shape encodings, copyable selectors, and export of the current filtered view.
Remove the embedded Html.fs viewer after the workbench covers its smoke-test use cases. Retain and improve GraphML as a derived interoperability export: preserve stable node/relation IDs, full IRIs, types, annotations, provenance references, and missing-node placeholders without claiming reversible persistence.
- Unit tests cover schema loading, graph projection, filtering, fragment resolution, and deterministic style assignment.
- Browser tests cover loading the representative fixture, searching, selecting assertions, viewing diagnostics/provenance, switching immutable states, and exporting a filtered view.
- A large synthetic graph remains interactive within a documented performance budget.
- No workbench action mutates or commits the curation ARC in this phase.
End-to-end evaluation is a human-in-the-loop activity and is not authorized by implementation of the earlier phases. When the libraries, test compiler, and workbench are ready for this review, stop and plan the methodology with the project owner before creating or publishing an evaluation run. Do not select a record, claim semantic/scientific validity, create an external evaluation repository, or push to a DataHUB instance autonomously.
The review must not begin from an empty script. Before the planning session, prepare a proposed versioned protocol and workspace scaffold for review, but do not execute it. The planning session must explicitly lock:
- a representative INSDC record and the reasons it exercises the intended mapping and curation risks;
- an evaluation workspace outside this source repository, structured as an ARC and initialized as its own Git repository;
- the exact source, mapping-set, immutable ArcIR state, diagnostic, native ARC process, target, and review entities/artifacts to retain, including expected commits and digest bindings;
- the automated structural/accounting checks, the manual semantic review checklist, expected curator interventions, pass/fail criteria, and who records approval;
- the target DataHUB development instance/project, access and data-handling constraints, and a separately authorized push/publish procedure;
- invalidation rules requiring review again when relevant code, mappings, protocol, source record, or generated artifact digests change.
Automated tests may establish structural validity, deterministic persistence, complete field accounting, and traceability. Only the planned human review may establish that the selected record's semantic mapping and curated result are acceptable.
These criteria are the starting checklist for that future planning session, not permission for an autonomous end-to-end run:
- A real committed INSDC fixture set can be ingested once into an initial
.arcir.jsonstate, inspected, curated through multiple immutable state artifacts and Git commits, and consumed by the test F2 compiler. - Any independently curatable assertion or designated scalar occurrence can be selected in its exact artifact and traced through the native ARC process graph to source fragments, transformation terms, mappings, diagnostics, processes, and generated target fragments.
- IR persistence is deterministic, reversible, schema-versioned, and independent of INSDC or any F2 target.
- Diagnostics are external immutable process outputs, while every ArcIR artifact contains only one graph state.
- The read-only workbench replaces the barebones HTML visualization and accurately exposes the same provenance and addressing model used by the libraries.
- A compatibility layer for the proof-of-concept ArcIR API or serializer-default shapes.
- A second automatic F1 pass over an already curated lineage.
- Overwriting earlier ArcIR states, patch-chain persistence, requiring sequentially numbered state filenames, or embedding diagnostics/history in the IR.
- A BioFSharp-specific transformation-record file or parallel provenance graph outside the ARC's native process model.
- Assigning intrinsic IDs to scalar
ArcValueorAnnotationValueoccurrences that are already designated by artifact and selector. - A concrete production F2 target.
- A browser-based curation editor or Git writer.
- Requiring every local INSDC term to have an external ontology mapping.
- Treating GraphML, JSON-LD, the workbench projection, or SSSOM as the ArcIR persistence format.
DONE means the original acceptance criteria were implemented and the document remains historical design context. SUPERSEDED means the plan is incomplete or its architecture was replaced; implemented portions remain historical, while outstanding work is consolidated here.
| Status | Historical plan | Reason |
|---|---|---|
| DONE | claude/implementation.md |
Generated INSDC model, eight IO modules, fixtures, build, and original verification were completed. |
| DONE | claude/crawler.md |
Discovery, fetching, SQLite persistence, retries, logging, resume, and offline/live-gated tests were implemented. |
| DONE | claude/r1-crawlers.md |
The R1A/R1B raw-artifact crawlers and their shared-fetch behavior are implemented. |
| DONE | claude/r2-crawlers.md |
XML, paper, DEE2, and composed R2 crawling are implemented. |
| DONE | claude/arcir-conversion-restructure.md |
Explicit, decompilation-decoupled converters were rolled out to all eight entities. |
| DONE | claude/arcir-graphml.md |
GraphML and the embedded HTML proof-of-concept viewer were implemented; their future differs as described above. |
| DONE | claude/arcir-ingest.md |
Supplementary paper/count ingestion and RFC 7111 fragments are implemented. |
| DONE | claude/xml-fragment-selectors.md |
Generated structural selectors, runtime XPath/XPointer lookup, and serializable XPath entries are implemented. |
| SUPERSEDED | claude/arcir-mapping.md |
Its graph foundation landed, but its settled structural-decompilation overlay was removed by the explicit conversion restructure. |
| SUPERSEDED | claude/arcir-export-readiness.md |
R1/R2 moved to the crawler; the proposed R0/R3/R4 F2 architecture is incomplete and replaced by the compiler boundary here. |
| SUPERSEDED | claude/sqlite-store.md |
The store landed, but its focused acceptance suite and migration work are consolidated into Phase 1. |
| SUPERSEDED | glm-5.2/arcir-export-readiness.md |
This earlier export draft was already partially superseded and is now fully historical. |
| SUPERSEDED | glm-5.2/r2-crawlers.md |
Replaced directly by the as-built claude/r2-crawlers.md. |
- Deliver phases in order. A later phase may prototype against an earlier branch, but it does not merge until the preceding phase's acceptance criteria pass.
- Keep model/wire-format changes and generated migrations in explicit release notes. Increment the ArcIR format major version for breaking wire changes and package major versions for breaking public API changes.
- Use FAKE targets as the solution-wide source of truth; CI remains a thin invoker.
- Each phase ends with updated schemas, fixtures, XML documentation, package READMEs, release notes, and a phase-scoped offline example where appropriate. Such examples are not the end-to-end evaluation, which remains behind the explicit human planning gate above.