NGI Assure call deadline 01/08/2022

Reply sent to NLnet today


Hi,

URL of the WorkPlan: Project Plan: Friendly Forge Format (F3) - HedgeDoc

Thanks a lot for taking a close look, it is helpful and the questions are relevant. I’ll try to answer them as much as I can but do not hesitate to let me know if I fail to clarify.

  • Could you help us understand the plan better by adding a sentence or two to the tasks? The section “Specifications Tooling” has a nice explanation, but e.g. “Idempotency” leaves me guessing what the task’s context, scope and and purpose is.

My bad, it is indeed subject to multiple interpretations. I added the following:

The API or the internals of a forge are not usually designed to be idempotent. For instance deleting an issue that does not exist, either because it never did or because it was just deleted, will not succeed. However an implementation of F3 must be idempotent: uploading the same F3 archive twice must not lead to the creation of two different set of objects. For that to be possible the F3 format must ensure it contains all the information required for an implementation to be idempotent despite the lack of idempotency of the API or of the internals of the target forge.

  • In the first task: “as published in WikiData” → is wikidata reliable and up-to-date on software forge features? Or do you also expect to contribute data to wikidata here?

I added this, good point. I have spent month working on WikiData in the past and I know what it entails.

  • Update WikiData as needed if information is found missing

I was pleasantly surprised by the forge inventory that exist in WikiData and I’m not expecting it will need too much work. It is not perfect of course but the very important thing is that it is the one place where such an inventory can be maintained collaboratively.

  • With downloading/uploading from/to “the API”, which API are we talking about? The API of a particular forge software?

Yes. To clarify I added the following definition:

An API is a REST API published by a given forge. For instance Forgejo API for Forgejo or REST API | GitLab for GitLab.

  • In the proposal you write about the relation to ForgeFed, e.g.: “Improvements to the ForgeFed specifications will be proposed so that data contained in a F3 archive can be translated and sent over ActivityPub.” We don’t see this reflected in the plan, while it seems worthwhile to try find maximum convergence between the projects. Might it be worth trying to create shared schemas, (RDF) vocabulary, or clearly defined mappings? When I see both ForgeFed Modeling and Friendly Forge Format (F3) / F3 schemas · GitLab I wonder if we are not inventing two wheels here.

When the proposal was written the situation was quite different. Neither Anthony Wang nor fr33domlover were funded to work on ForgeFed. Today they both are and we’ve had discussions about how F3 fits with ForgeFed. In a nutshell it is a layer ForgeFed can rely on for its implementation and we are coordinating to unify the terms.

Here is a list of what F3 and ForgeFed share as of today.

Mapping

Only the fields that have a correspondence are represented here

Not yet represented in F3

Not in scope for F3

It is great that we have the mean and the will to work together and I fully expect this will continue to be the case during the duration of this grant. However, I cannot commit to a deliverable that would be specific enough to be included in the workplan, primarily because I can’t be sure where ForgeFed is going to be in six months from now.

  • With the V1/“first release”, do you mean the release of both the spec&tooling?

Yes. The general idea is that a release contains everything a third party would need to improve the specification on their own and verify it works as intended. I added the following:

A F3 release consists of the specifications, the compliance tests and the release tooling.

  • What form will the tooling take? A command line tool that I can give a gitlab and gitea URL, and it will migrate my project? Or/and an integration (e.g. plugin/webhooks-based) in those forges in some form, to mirror a project to another forge? Or/and some web interface? Or…?

The tooling is a set of CI pipelines. They will rely on scripts that could also be run independently but that is an internal detail. Someone willing to use the tools (compliance and release) will simply add them in a forge instance, trigger the CI to run them and wait for the result to show in the forge interface.

  • The compliance tests for Forgejo, Gitea, and GitLab; does that mean a test suite that creates actual instances of those forges with test data, exports and imports the data between them, and checks the results?

Exactly. I added the following to clarify.

Compliance testing is a fully automated CI pipeline that create a new forge instance for the duration of the test. Each test demonstrates a particular aspect of the F3 specification can actually be implemented for this particular version of the forge. For instance a test will spawn a Forgejo v1.18 instance, upload a new issue via the API from a compliant F3 issue, download it back using the API and verify the result is a well formed comparable F3 issue.

  • Is GitHub out of scope in this project?

It is not: it will be included in the inventory/comparison. But being proprietary it would be too difficult to include it in the implementation of the tooling and tests in the context of this grant. However, since both Forgejo and Gitea implement a REST API similar to GitHub, it will partly be covered.

Sincerely

Project Plan Friendly Forge Format (F3).md (5.9 KB)

Received from NLnet today (not attaching the MoU as it contains private data, it will be redacted and published when final).


Hi Loïc,

Thanks still for the answers.

I cast your plan into our format (molding it a bit as we lack sub-subheadings etc.), and forged an MoU for you.

It is implied (in the ‘compliance testing’ task description), but not explicit, that you make each tooling feature work for (at least) Gitea/Forgejo and Gitlab. Correct? I added this line in the intro about tooling (which moved into the plan intro):

Each feature of the F3 tooling will work with Gitea, Forgejo, and Gitlab (to the extent each has the required features).

In the code and documentation it will probably be helpful to be explicit about which versions of which forges the tool works with.

I also added descriptions to the tasks about down/uploading using internals, basing on your explanation. With internals, do you mean reading directly from the database, or using a (command-line) data export tool provided by the forge? (asking just for curiosity; it’s similar enough, and fine to leave it open in the task description.)

Please check if everything looks right, and if so add (a scan of) your signature. Then we’ll do the same and we are (officially) started. :slight_smile: (but also feel free to come back with further questions/suggestions)


Sent the following reply:


Hi,

Hi Loïc,

Thanks still for the answers.

I cast your plan into our format (molding it a bit as we lack sub-subheadings etc.), and forged an MoU for you.

It is implied (in the ‘compliance testing’ task description), but not explicit, that you make each tooling feature work for (at least) Gitea/Forgejo and Gitlab. Correct? I added this line in the intro about tooling (which moved into the plan intro):

Each feature of the F3 tooling will work with Gitea, Forgejo, and Gitlab (to the extent each has the required features).

This is correct, thanks for adding this.

In the code and documentation it will probably be helpful to be explicit about which versions of which forges the tool works with.

The test pipelines will be pinned to specific versions of forges.

I also added descriptions to the tasks about down/uploading using internals, basing on your explanation. With internals, do you mean reading directly from the database, or using a (command-line) data export tool provided by the forge? (asking just for curiosity; it’s similar enough, and fine to leave it open in the task description.)
It could be reading directly from the database, but it is unlikely to be the case. The more general case is using function calls that are in the forge codebase but which are not exposed via a publicly available API. Either because the API endpoint is missing entirely. Or because the API endpoint does not accept some parameters (such as forcing the creation date of something).

Please check if everything looks right, and if so add (a scan of) your signature. Then we’ll do the same and we are (officially) started. :slight_smile: (but also feel free to come back with further questions/suggestions)
Everything is correct. I’m grateful for the effort you made to format this into the MoU: it is a tedious task.

I fixed a few minor typos and attached the modified document with revisions shown so you can quickly verify them.

I attach the signed MoU and I look forward to getting started as soon as possible.

Cheers

Received the signed Memoradum of Understanding today, anonymized and attached here. The amounts were also redacted as per NLnet request.

2022-08-025-MoU-Loïc Dachary-Friendly Forge Format (F3)-anonymous.odt (109.5 KB)

1 Like