Skip to contents

A minimal Go implementation of Betwixt is planned for workflows that do not require programmatic candidate generation.

In the R implementation, candidate datasets can be constructed reproducibly from source data using functions such as create_candidate_dataset() and add_candidate_column(). This is useful in research and data-processing pipelines where candidate generation itself forms part of a reproducible computational workflow.

Many practical review tasks begin elsewhere. A data manager may prepare candidate data in Excel, LibreOffice, OpenRefine, a collection-management system, or another tabular environment. In these cases, Betwixt does not need to reproduce the process that created the candidate dataset. It only needs to accept a candidate dataset that follows the Betwixt tabular conventions.

A minimal Go implementation can therefore concentrate on two operations:

candidate dataset
       ↓
 render_review()
       ↓
standalone HTML
       ↓
 human review
       ↓
  read_review()
       ↓
reviewed data

The equivalent of render_review() would read a candidate dataset, validate its structure, and create the standalone Betwixt review document. The equivalent of read_review() would reconstruct the candidate state, reviewed state, review status, context, and provenance from a saved review.

This makes Go particularly suitable for a small standalone Betwixt application. A compiled executable could provide the review round trip without requiring R, Python, a package environment, or a server.

Such an implementation would be especially useful for people who prepare and clean data interactively in Excel or OpenRefine:

Excel / OpenRefine
        ↓
candidate dataset
        ↓
   Betwixt Go
        ↓
standalone review
        ↓
   human review
        ↓
   Betwixt Go
        ↓
reviewed dataset

Interoperability with the R implementation should be defined by the exchanged artefacts rather than by identical internal code. A candidate dataset accepted by R should also be usable by Go, and a review rendered by one implementation should be readable by the other.

The initial Go implementation can therefore remain deliberately small. Reproducing Betwixt’s programmatic candidate-generation API is not a requirement. The priority is a portable implementation of the candidate dataset → review → reviewed dataset round trip.