# Standard for Public Code assessment

**URL:** <https://forum.openrefine.org/t/standard-for-public-code-assessment/1213>\
**Category:** OpenRefine documentation\
**Created:** [January 24, 2024, 2:54pm UTC](https://forum.openrefine.org/t/standard-for-public-code-assessment/1213 "2024-01-24T14:54:39Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ainali](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.openrefine.org/ainali/32/14_2.png) [@Ainali](https://forum.openrefine.org/u/Ainali)\
**Post date:** [January 24, 2024, 2:54pm UTC](https://forum.openrefine.org/t/standard-for-public-code-assessment/1213/1 "2024-01-24T14:54:39Z")

</div>

In my day job at [Foundation for Public Code](https://publiccode.net/) I am one of the maintainers of the [Standard for Public Code](https://standard.publiccode.net/). As OpenRefine is being used by both academics, GLAM staff etc. it could arguably fit into the definition of what we call [public code](https://about.publiccode.net/glossary/public-code-definition.html). Therefore, and also because OpenRefine is a more of a community-based codebase than other codebases developed for public organizations, we thought it would be a useful exercise to do an assessment of OpenRefine towards the Standard for Public Code. I'll paste in our first round of assessment, @antonin_d also had a chance to chime in on it. As you can see, there are still some question marks. Please comment if you see something that has been overlooked or misunderstood, or if you know of some better links for the notes. (I guess this will also be an experiment in very long forum posts.)

## [Code in the open](https://standard.publiccode.net/criteria/code-in-the-open.html)

☑ criterion met.

| Meets | Requirement | Notes and links |
| --- | --- | --- |
| N/A | All source code for any policy in use (unless used for fraud detection) MUST be published and publicly accessible. | Keep an eye open where OpenRefine is used, there might exist at some libraries or universites. |
| Ok | All source code for any software in use (unless used for fraud detection) MUST be published and publicly accessible. | [Github](https://github.com/OpenRefine/OpenRefine) |
| Ok | The codebase MUST NOT contain sensitive information regarding users, their organization or third parties. | Given that it has been public for this long. |
| Ok | Any source code not currently in use (such as new versions, proposals or older versions) SHOULD be published. | [Releases](https://github.com/OpenRefine/OpenRefine/releases) are available since Jul 24, 2013. |
| N/A | Documenting which source code or policy underpins any specific interaction the general public may have with an organization is OPTIONAL. | |

## [Bundle policy and source code](https://standard.publiccode.net/criteria/bundle-policy-and-source-code.html)

☑ criterion met.

| Meets | Requirement | Notes and links |
| --- | --- | --- |
| N/A | The codebase MUST include the policy that the source code is based on. | Keep an eye open where OpenRefine is used, there might exist at some libraries or universites. |
| N/A | If a policy is based on source code, that source code MUST be included in the codebase, unless used for fraud detection. | See above. |
| N/A | Policy SHOULD be provided in machine-readable and unambiguous formats. | See above. |
| N/A | Continuous integration tests SHOULD validate that the source code and the policy are executed coherently. | See above. |

## [Make the codebase reusable and portable](https://standard.publiccode.net/criteria/make-the-codebase-reusable-and-portable.html)

☐ criterion met.

| Meets | Requirement | Notes and links |
| --- | --- | --- |
| Ok | The codebase MUST be developed to be reusable in different contexts. | Can be run locally, no configuration required. |
| Ok | The codebase MUST be independent from any secret, undisclosed, proprietary or non-open licensed software or services for execution and understanding. | |
| Ok | The codebase SHOULD be in use by multiple parties. | Some examples: [Google Scholar search results](https://scholar.google.com/scholar?hl=fr&as_sdt=0%2C5&q=OpenRefine&btnG=) |
| Ok | The roadmap SHOULD be influenced by the needs of multiple parties. | No single roadmap, discussions collected under the [roadmap tag in forum](https://forum.openrefine.org/tag/roadmap), [explanation in docs](https://openrefine.org/docs/technical-reference/development-roadmap) |
| Ok | The development of the codebase SHOULD be a collaboration between multiple parties. | Most developers are either volunteers or grant funded. |
| N/A | Configuration SHOULD be used to make source code adapt to context specific needs. | No configuration needed. |
| Ok | The codebase SHOULD be localizable. | [Documentation](https://openrefine.org/docs/technical-reference/translating-ui), [translation platform](https://hosted.weblate.org/engage/openrefine/) |
| Ok | Source code and its documentation SHOULD NOT contain situation-specific information. | |
| | Codebase modules SHOULD be documented in such a way as to enable reuse in codebases in other contexts. | Work has started through [GitHub issue](https://github.com/OpenRefine/OpenRefine/issues/2254) - [Packages published on Maven Central](https://central.sonatype.com/namespace/org.openrefine) but is not quite complete. |
| Ok | The software SHOULD NOT require services or platforms available from only a single vendor. | |

## [Welcome contributors](https://standard.publiccode.net/criteria/welcome-contributors.html)

☐ criterion met.

| Meets | Requirement | Notes and links |
| --- | --- | --- |
| Ok | The codebase MUST allow anyone to submit suggestions for changes to the codebase. | [Pull requests](https://github.com/OpenRefine/OpenRefine/pulls) |
| Ok | The codebase MUST include contribution guidelines explaining what kinds of contributions are welcome and how contributors can get involved, for example in a `CONTRIBUTING` file. | [CONTRIBUTING](https://github.com/OpenRefine/OpenRefine/blob/master/CONTRIBUTING.md) |
| Ok | The codebase MUST document the governance of the codebase, contributions and its community, for example in a `GOVERNANCE` file. | [GOVERNANCE](https://github.com/OpenRefine/OpenRefine/blob/master/GOVERNANCE.md) |
| | The contribution guidelines SHOULD document who is expected to cover the costs of reviewing contributions. | README or CONTRIBUTING could include a sentence or two explaining that volunteers reveiw contributions on best-effort basis. |
| Ok | The codebase SHOULD advertise the committed engagement of involved organizations in the development and maintenance. | Explained on the [wiki](https://github.com/OpenRefine/OpenRefine/wiki/Funded-projects) but will be [replaced by a page on the website](https://github.com/OpenRefine/openrefine.org/pull/262) |
| | The codebase SHOULD have a publicly available roadmap. | No single roadmap, discussions collected under the [roadmap tag in forum](https://forum.openrefine.org/tag/roadmap), [explanation in docs](https://openrefine.org/docs/technical-reference/development-roadmap) (an improvement to this page and linked from the README would be sufficient) |
| Ok | The codebase SHOULD publish codebase activity statistics. | [GitHub pulse](https://github.com/OpenRefine/OpenRefine/pulse) |
| Ok | Including a code of conduct for contributors in the codebase is OPTIONAL. | [CODE OF CONDUCT](https://github.com/OpenRefine/OpenRefine/blob/master/CODE_OF_CONDUCT.md) |

## [Make contributing easy](https://standard.publiccode.net/criteria/make-contributing-easy.html)

☑ criterion met.

| Meets | Requirement | Notes and links |
| --- | --- | --- |
| Ok | The codebase MUST have a public issue tracker that accepts suggestions from anyone. | [Issues](https://github.com/OpenRefine/OpenRefine/issues) |
| Ok | The documentation MUST link to both the public issue tracker and submitted codebase changes, for example in a `README` file. | GitHub |
| Ok | The codebase MUST have communication channels for users and developers, for example email lists. | [Forum](https://forum.openrefine.org) |
| Ok | There MUST be a way to report security issues for responsible disclosure over a closed channel. | [GitHub security advisory](https://github.com/OpenRefine/OpenRefine/security/advisories/new) |
| Ok | The documentation MUST include instructions for how to report potentially security sensitive issues. | [SECURITY](https://github.com/OpenRefine/OpenRefine/blob/master/SECURITY.md) |

## [Maintain version control](https://standard.publiccode.net/criteria/maintain-version-control.html)

☐ criterion met.

| Meets | Requirement | Notes and links |
| --- | --- | --- |
| Ok | All files in the codebase MUST be version controlled. | Git |
| | All decisions MUST be documented in commit messages. | There is a [policy](https://openrefine.org/docs/technical-reference/code-contributions) but it is not strongly enforced. |
| | Every commit message MUST link to discussions and issues wherever possible. | There is a [policy](https://openrefine.org/docs/technical-reference/code-contributions) but it is not strongly enforced. |
| Ok | The codebase SHOULD be maintained in a distributed version control system. | Git |
| | Contribution guidelines SHOULD require contributors to group relevant changes in commits. | |
| Ok | Maintainers SHOULD mark released versions of the codebase, for example using revision tags or textual labels. | [Releases](https://github.com/OpenRefine/OpenRefine/releases) |
| | Contribution guidelines SHOULD encourage file formats where the changes within the files can be easily viewed and understood in the version control system. | |
| | It is OPTIONAL for contributors to sign their commits and provide an email address, so that future contributors are able to contact past contributors with questions about their work. | |

## [Require review of contributions](https://standard.publiccode.net/criteria/require-review-of-contributions.html)

☐ criterion met.

| Meets | Requirement | Notes and links |
| --- | --- | --- |
| Ok | All contributions that are accepted or committed to release versions of the codebase MUST be reviewed by another contributor. | Both a [policy](https://github.com/OpenRefine/OpenRefine/blob/master/CONTRIBUTING.md#how-to-submit-prs-pull-requests-patches-and-bug-fixes) and branch protection |
| Ok | Reviews MUST include source, policy, tests and documentation. | [Simple guide](https://openrefine.org/docs/technical-reference/code-contributions#testing-your-changes) and [Maintainer guidelines](https://openrefine.org/docs/technical-reference/maintainer-guidelines) |
| Ok | Reviewers MUST provide feedback on all decisions to not accept a contribution. | [Policy](https://github.com/OpenRefine/OpenRefine/blob/master/CONTRIBUTING.md#how-to-submit-prs-pull-requests-patches-and-bug-fixes) to answer all PRs |
| Ok | The review process SHOULD confirm that a contribution conforms to the standards, architecture and decisions set out in the codebase in order to pass review. | [Maintainer guidelines](https://openrefine.org/docs/technical-reference/maintainer-guidelines) |
| Ok | Reviews SHOULD include running both the software and the tests of the codebase. | [Simple guide](https://openrefine.org/docs/technical-reference/code-contributions#testing-your-changes) and [Maintainer guidelines](https://openrefine.org/docs/technical-reference/maintainer-guidelines) |
| | Contributions SHOULD be reviewed by someone in a different context than the contributor. | De facto mostly true, but no explicit policy more than the reviewer should be someone else than one submitting the PR |
| Ok | Version control systems SHOULD NOT accept non-reviewed contributions in release versions. | Master branch branch protected |
| | Reviews SHOULD happen within two business days. | |
| | Performing reviews by multiple reviewers is OPTIONAL. | |

## [Document codebase objectives](https://standard.publiccode.net/criteria/document-codebase-objectives.html)

☑ criterion met.

| Meets | Requirement | Notes and links |
| --- | --- | --- |
| Ok | The codebase MUST contain documentation of its objectives, like a mission and goal statement, that is understandable by developers and designers so that they can use or contribute to the codebase. | Opening paragraph of [README](https://github.com/OpenRefine/OpenRefine/blob/master/README.md) |
| N/A | Codebase documentation SHOULD clearly describe the connections between policy objectives and codebase objectives. | |
| | Documenting the objectives of the codebase for the general public is OPTIONAL. | |

## [Document the code](https://standard.publiccode.net/criteria/document-the-code.html)

☐ criterion met.

| Meets | Requirement | Notes and links |
| --- | --- | --- |
| | All of the functionality of the codebase, policy as well as source code, MUST be described in language clearly understandable for those that understand the purpose of the codebase. | |
| Ok | The documentation of the codebase MUST contain a description of how to install and run the software. | Brief in [README](https://github.com/OpenRefine/OpenRefine#run-from-source), detailed in [user manual](https://openrefine.org/docs/manual/installing) |
| Ok | The documentation of the codebase MUST contain examples demonstrating the key functionality. | Plenty of small examples in the [docs](https://openrefine.org/docs) and many tutorials at [External Resources](https://github.com/OpenRefine/OpenRefine/wiki/External-Resources) |
| Ok | The documentation of the codebase SHOULD contain a high level description that is clearly understandable for a wide audience of stakeholders, like the general public and journalists. | The opening sentence of [README](https://github.com/OpenRefine/OpenRefine/blob/master/README.md) is okay. |
| Ok | The documentation of the codebase SHOULD contain a section describing how to install and run a standalone version of the source code, including, if necessary, a test dataset. | [Installing](https://openrefine.org/docs/manual/installing) |
| Ok? | The documentation of the codebase SHOULD contain examples for all functionality. | |
| | The documentation SHOULD describe the key components or modules of the codebase and their relationships, for example as a high level architectural diagram. | [Architecture](https://openrefine.org/docs/technical-reference/architecture-before-4) is explained, a diagram would help |
| | There SHOULD be continuous integration tests for the quality of the documentation. | |
| | Including examples that make users want to immediately start using the codebase in the documentation of the codebase is OPTIONAL. | |

## [Use plain English](https://standard.publiccode.net/criteria/use-plain-english.html)

☐ criterion met.

| Meets | Requirement | Notes and links |
| --- | --- | --- |
| Ok | All codebase documentation MUST be in English. | |
| Ok | All source code MUST be in English, except where policy is machine interpreted as code. | |
| N/A | All bundled policy not available in English MUST have an accompanying summary in English. | |
| | Any translation MUST be up to date with the English version and vice versa. | |
| | There SHOULD be no acronyms, abbreviations, puns or legal/non-English/domain specific terms in the codebase without an explanation preceding it or a link to an explanation. | |
| | Documentation SHOULD aim for a lower secondary education reading level, as recommended by the [Web Content Accessibility Guidelines 2](https://www.w3.org/WAI/WCAG21/quickref/?showtechniques=315#readable). | |
| | Providing a translation of any code, documentation or tests is OPTIONAL. | |

## [Use open standards](https://standard.publiccode.net/criteria/use-open-standards.html)

☐ criterion met.

| Meets | Requirement | Notes and links |
| --- | --- | --- |
| | For features of the codebase that facilitate the exchange of data the codebase MUST use an open standard that meets the [Open Source Initiative Open Standard Requirements](https://opensource.org/osr). | |
| | Any non-open standards used MUST be recorded clearly as such in the documentation. | |
| | Any standard chosen for use within the codebase MUST be listed in the documentation with a link to where it is available. | |
| | Any non-open standards chosen for use within the codebase MUST NOT hinder collaboration and reuse. | |
| | If no existing open standard is available, effort SHOULD be put into developing one. | |
| | Open standards that are machine testable SHOULD be preferred over open standards that are not. | |
| | Non-open standards that are machine testable SHOULD be preferred over non-open standards that are not. | |

## [Use continuous integration](https://standard.publiccode.net/criteria/use-continuous-integration.html)

☐ criterion met.

| Meets | Requirement | Notes and links |
| --- | --- | --- |
| | All functionality in the source code MUST have automated tests. | |
| | Contributions MUST pass all automated tests before they are admitted into the codebase. | |
| | The codebase MUST have guidelines explaining how to structure contributions. | |
| | The codebase MUST have active contributors who can review contributions. | |
| | Automated test results for contributions SHOULD be public. | |
| | The codebase guidelines SHOULD state that each contribution should focus on a single issue. | [OpenRefine/CONTRIBUTING.md at master · OpenRefine/OpenRefine · GitHub](https://github.com/OpenRefine/OpenRefine/blob/master/CONTRIBUTING.md#how-to-submit-prs-pull-requests-patches-and-bug-fixes) |
| | Source code test and documentation coverage SHOULD be monitored. | |
| | Testing policy and documentation for consistency with the source and vice versa is OPTIONAL. | |
| | Testing policy and documentation for style and broken links is OPTIONAL. | |
| | Testing the software by using examples in the documentation is OPTIONAL. | |

## [Publish with an open license](https://standard.publiccode.net/criteria/publish-with-an-open-license.html)

☐ criterion met.

| Meets | Requirement | Notes and links |
| --- | --- | --- |
| Ok | All source code and documentation MUST be licensed such that it may be freely reusable, changeable and redistributable. | [LICENSE](https://github.com/OpenRefine/OpenRefine/blob/master/LICENSE.txt) |
| Ok | Software source code MUST be licensed under an [OSI-approved or FSF Free/Libre license](https://spdx.org/licenses/). | [BSD 3-Clause](https://github.com/OpenRefine/OpenRefine/blob/master/LICENSE.txt) |
| Ok | All source code MUST be published with a license file. | |
| Ok | Contributors MUST NOT be required to transfer copyright of their contributions to the codebase. | |
| | All source code files in the codebase SHOULD include a copyright notice and a license header that are machine-readable. | |
| Ok | Having multiple licenses for different types of source code and documentation is OPTIONAL. | Documentation is CC BY 4.0 |

## [Make the codebase findable](https://standard.publiccode.net/criteria/make-the-codebase-findable.html)

☐ criterion met.

| Meets | Requirement | Notes and links |
| --- | --- | --- |
| Ok | The name of the codebase SHOULD be descriptive and free from acronyms, abbreviations, puns or organizational branding. | |
| Ok | The codebase SHOULD have a short description that helps someone understand what the codebase is for or what it does. | |
| Ok | Maintainers SHOULD submit the codebase to relevant software catalogs. | [Snap store](https://snapcraft.io/openrefine) [Alternative-to](https://alternativeto.net/software/google-refine/about/) [Repology](https://repology.org/project/openrefine/information) |
| Ok | The codebase SHOULD have a website which describes the problem the codebase solves using the preferred jargon of different potential users of the codebase (including technologists, policy experts and managers). | [https://openrefine.org/](https://openrefine.org/) |
| Ok | The codebase SHOULD be findable using a search engine by codebase name. | |
| Ok | The codebase SHOULD be findable using a search engine by describing the problem it solves in natural language. | first hit on duck duck go [open source tool messy data](https://duckduckgo.com/?hps=1&q=+open+source+tool+messy+data) |
| Ok | The codebase SHOULD have a unique and persistent identifier where the entry mentions the major contributors, repository location and website. | [Wikidata](https://www.wikidata.org/wiki/Q5583871) |
| | The codebase SHOULD include a machine-readable metadata description, for example in a [publiccode.yml](https://github.com/publiccodeyml/publiccode.yml) file. | |
| Ok | A dedicated domain name for the codebase is OPTIONAL. | [openrefine.org](https://openrefine.org/) |
| Ok | Regular presentations at conferences by the community are OPTIONAL. | [Events page](https://github.com/OpenRefine/OpenRefine/wiki/Events) and many listed under [External resources](https://github.com/OpenRefine/OpenRefine/wiki/External-Resources) |

## [Use a coherent style](https://standard.publiccode.net/criteria/use-a-coherent-style.html)

☐ criterion met.

| Meets | Requirement | Notes and links |
| --- | --- | --- |
| | The codebase MUST use a coding or writing style guide, either the codebase community's own or an existing one referred to in the codebase. | Style is discussed in technical reference, for Java sourse it include linting with [mvn formatter:format](https://openrefine.org/docs/technical-reference/code-contributions#submitting-your-changes). |
| | Contributions SHOULD pass automated tests on style. | [only for tests](https://openrefine.org/docs/technical-reference/maintainer-guidelines#code-style) |
| | The style guide SHOULD include expectations for inline comments and documentation for non-trivial sections. | [Expectations on documentation](https://openrefine.org/docs/technical-reference/maintainer-guidelines#documentation), but no mentions of inline comments |
| | Including expectations for [understandable English](https://standard.publiccode.net/criteria/use-plain-english.html) in the style guide is OPTIONAL. | |

## [Document codebase maturity](https://standard.publiccode.net/criteria/document-codebase-maturity.html)

☐ criterion met.

| Meets | Requirement | Notes and links |
| --- | --- | --- |
| Ok | The codebase MUST be versioned. | [Releases](https://github.com/OpenRefine/OpenRefine/releases) |
| | The codebase MUST prominently document whether or not there are versions of the codebase that are ready to use. | |
| | Codebase versions that are ready to use MUST only depend on versions of other codebases that are also ready to use. | Not all used libraries are stable, for example [Odfdom Java](https://github.com/OpenRefine/OpenRefine/blob/master/pom.xml#L96) |
| | The codebase SHOULD contain a log of changes from version to version, for example in the `CHANGELOG`. | Each release on the the GitHub releases page contains good notes, and there is a [Whats New](https://github.com/OpenRefine/OpenRefine/wiki/Whats-New), but not a singular ChangeLog per se. |
| | The method for assigning version identifiers SHOULD be documented. | Looks like it might be semver, but not obviously documented as such. |
| | It is OPTIONAL to use semantic versioning. | |

---

<div class="post-metadata">

**Author:** ![thadguidry](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.openrefine.org/thadguidry/32/653_2.png) [@thadguidry](https://forum.openrefine.org/u/thadguidry)\
**Post date:** [January 24, 2024, 11:43pm UTC](https://forum.openrefine.org/t/standard-for-public-code-assessment/1213/2 "2024-01-24T23:43:04Z")

</div>

> [@Ainali](#):
>
> It is OPTIONAL for contributors to sign their commits and provide an email address, so that future contributors are able to contact past contributors with questions about their work.

I think we are OK on this by default by the fact that our Git repository that stores commits is actually GitHub, and has this optional policy already in it's infrastructure. If we were to move to another provider say like Gitlab or Apache, does this mean we need to have some wording improvements in our CONTRIBUTING.md file? Confused on this one.

---

<div class="post-metadata">

**Author:** ![Ainali](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.openrefine.org/ainali/32/14_2.png) [@Ainali](https://forum.openrefine.org/u/Ainali)\
**Post date:** [January 25, 2024, 6:04pm UTC](https://forum.openrefine.org/t/standard-for-public-code-assessment/1213/3 "2024-01-25T18:04:09Z")

</div>

@thadguidry Yeah, platforms can really help. We didn't check the complete history yet to see if there were emails for all past commits, I think that was why we left it open for now. And if we move, both adding it to CONTRIBUTING would be good, but also making sure it is enforced before merging.

---

<div class="post-metadata">

**Author:** ![Ainali](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.openrefine.org/ainali/32/14_2.png) [@Ainali](https://forum.openrefine.org/u/Ainali)\
**Post date:** [January 31, 2024, 2:29pm UTC](https://forum.openrefine.org/t/standard-for-public-code-assessment/1213/4 "2024-01-31T14:29:22Z")

</div>

As a follow-up question, where would be a good place to publish this assessment? If there was an ambition to go for full compliance, I would suggest linking it somewhere from the [Contributing to OpenRefine section](https://openrefine.org/docs/technical-reference/contributing), but given the lack of this, I am not sure where to put it. It could possibly fit as a blog post. Any other ideas?
