New project starting: Programmable sq

By Lars | January 25, 2022

The NLnet Foundation has granted me funding (from the NGI Assure fund, financially supported by the European Council) to improve the Sequoia sq program in three ways.

I will add important missing functionality, especially compared to GnuPG. This work will be guided by feedback from actual and potential users and the wisdom of Sequoia developers.

I will also add a JSON API to allow sq to be used from scripts. Ideally, other programs would use the Sequoia library directly, however, using sq from other programs should be easy and secure, and JSON is a better format than parsing textual output or ad hoc structured data formats

I will additionally document the acceptance criteria of sq and how they are verified automatically, to make sure sq does the right thing for its users, and to help keep sq working far into the future.

I have now started the work, and am about to reach the first milestone.

The first milestone was defined as:

When this milestone has been reached: An initial list of acceptance criteria for sq have been documented based on functionality at the beginning of the project. This will include how to automatically verify that sq fulfills the criteria. The verification is done by Sequoia CI for every change.

This milestone produces a foundational building block for all other development: it sets up the way how sq functionality and acceptance criteria will be documented and verified in an automated way. This is best done early in the process so that it supports development work, rather than done at the end, when it’s more work to do.

Implementation steps:

  • write acceptance criteria and verification scenarios for as much of existing sq functionality as there is time for

Time estimate: 5 days

Deliverable: blog post linking to acceptance criteria documentation

The work was split into several merge requests: !1208, !1210, !1213, !1216, !1217, !1218, and !1219.

Some aspects of sq remain unverified by the test suite. I opened #808 to track them so they’re not forgotten. Test coverage can be measured in various ways. I opt to measure how many features of sq are verified by the acceptance test suite, rather than how much of the code is run by the test suite. I feel this works better when testing the program as a whole.

My detailed project plan is on my personal site, but I will blog here about each milestone I reach.

The next milestone is about building a group of people who have an interest in using sq in any way and want to help make it good. I will be publishing a separate blog post about this, soon, but if you’d like to volunteer early, please email me at