thicket

By Steph9
Scroll to open

A note on inheriting thicket

This library parses and re-emits iCalendar files and has done since 2013. The person who wrote it stopped answering in early 2024. In October I asked for the commit bit on a project I had contributed to exactly twice. This is the note I wanted to read before I said yes.

How This Happened

There was no handover. There was an issue titled "is this project still maintained?" with fourteen thumbs up and no reply, and underneath it a comment from somebody offering to help that was also unanswered. I emailed the address in the gemspec and got nothing. Six weeks later I emailed again saying I intended to ask the registry about adopting it, and that one got a two line reply: yes, go ahead, sorry, I have not had the energy for a long time.

The handover01.06.2013 – 01.11.2024
01.06.2013First release. Written by one person for one consulting project that needed to read Outlook invitations.
01.06.2013
01.11.2019Peak. Six contributors in a year. Almost every Ruby calendar integration ends up here eventually.
01.11.2019
01.08.2023Last substantive commit from the original author. Nothing dramatic in it. It just stops.
01.08.2023
01.02.2024"Is this project still maintained?" opened. Fourteen thumbs up. No reply for eight months.
01.02.2024
01.10.2024Two line email. Yes, go ahead, sorry. Commit bit transferred four days later.
01.10.2024
01.11.2024First release in fifteen months. Contained nothing new. Only the four security advisories.
01.11.2024

What I Found Underneath

Better than I expected and worse than it looked. The parser is genuinely good, carefully written, and clearly the work of someone who had read the RFC properly rather than guessed. Around it were 340 open issues, a test suite that had not run on a supported Ruby in two years, and four dependency advisories that were all trivially fixable and had simply been sitting there because nobody had the keys.

Public repositories depending on this

about 11,000

Open issues when I took over

340

Open issues now

180

Months without a release before I started

15

Other maintainers

0

About The Person Who Wrote It

They gave eleven years to something they were not paid for, and then they stopped, which is allowed. The reason there was no handover is that there is no mechanism for one. Nobody asks a volunteer to write a succession plan, and by the time it is needed the person who would have written it has already run out of the energy required to write it. This page exists partly so that the next transfer of this library is less improvised than mine was.

"

Sorry, I have not had the energy for a long time. I kept meaning to write something and then it was easier to not open the tab.

"

from the reply that transferred the project

What I have actually fixed

0%

Four dependency advisories, in the first release after taking over

CI running again, on every supported Ruby rather than the one from 2022

The timezone handling for all-day events, which caused about 40 of the 340 issues

Triage on every issue older than a year. Most were closed. Some were just answered

A CONTRIBUTING file that says what I will and will not merge

What I have not fixed and probably will not

0%

The recurrence rule engine. It is correct for common cases and wrong for exotic ones

Streaming for very large files. Requested since 2018. It needs a rewrite I do not have time for

Windows path handling in the file loader. I have no Windows machine and will not guess

Anything requiring me to break the API. That decision is not mine to make alone

The 180 issues still open. Realistically most will stay open

What I Will Not Do

I will not pretend this is a thriving project. I will not add features to make it look active. I will not accept a pull request I do not understand well enough to fix at midnight when it breaks, no matter how good it looks, because merging code you cannot maintain is how a project gets abandoned twice. Everything I have merged in eighteen months, I could rewrite from scratch.

If I Stop

Somebody should be able to take this over without the eight months of silence I sat through. So: the gem is owned by two accounts rather than one, the second belonging to a person who has agreed to hand it on rather than to maintain it. The CONTRIBUTING file names them. It is not a succession plan. It is a phone number, which is one more than I had.

If you are considering taking on an abandoned project

0%

Read the last two years of issues before the code. That is the real workload

Check whether the original author is unreachable or just tired. Ask twice, kindly

Fix security and CI first. It buys goodwill and it is finite work you can finish

Write down what you will not do, publicly, in the first month

Find one other person for the registry account before you need them