NIP-1971: Problem Tracking

September 8, 2024 ยท View on GitHub

Kind 31971

RFC 2119DescriptionSpec or Example
MUSTIdentifier["d", <random 256bit hex>]
MUSTOne sentence describing the problem, used as the title in clients["tldr", <up to 140 character description of the problem>]
SHOULDOne paragraph describing the problem["para", <up to 560 charactars summarizing the problem>]
OPTIONALOne page describing the problem, MAY include markdown["page", <extended description of the problem>]
SHOULDThe parent(s) of this problem["a", 31971:<pubkey>:<256bit hex>, "parent"]
OPTIONALRockets that this applies to["a", 31108:<pubkey>:<rocket name>]
SHOULDLifecycle status["status", "<draft | rfm | big | children | open | claimed | patched | closed">]
OPTIONALClaim data["claim", <pubkey claiming it>:<bitcoin height when claimed>]
SHOULDChild status upon creation["child_status", <rfm | open >]
OPTIONALrepository["repo", 30617:<pubkey>:<d-tag>]
OPTIONALrequired skill, language, etc["skill", "golang"] ["skill", "docker"]
OPTIONALreferences to other problems["a", 31971:<pubkey>:<256bit hex>, "mention"]
SHOULDPubkeys of maintainers, add a new tag for each, clients SHOULD copy the parent's list to begin with["maintainer", <pubkey>]
SHOULDCurrent block when publishing, mostly for convenience.[ "bitcoin", "<current bitcoin height>:<hash>" ]

Events published by maintainers and using the same d tag are considered as replacements (by the client, not relays) if they are newer.

Clients get maintainer lists from the event itself, if none are specified then they use the parent event list, the tagged rocket(s), tagged NIP34 repo, etc.

Lifecycle

Problems are intended to go through a specific lifecycle.

Problems begin as open. Problems that can be solved in something like 6 hours of work or less can be claimed and solved. To claim a problem, a participant MUST publish a kind 1 event in reply to the problem, with the tag ["claim"]. Maintainers SHOULD then update the status of the problem to claimed and include the claim tag indicating which pubkey claimed it and when.

Maintainers themselves can claim a problem by simply updating the claim tag without publishing an extra events (but maybe they should anyway as a courtesy).

The reason problems should be claimed before working on them is to prevent duplicate work.

If the person who claimed a problem does not send a pull request or some other solution and is not responsive for a period of greater than 144 blocks, maintainers should revert the problem back to the open status so that it can be claimed by someone else.

When the person who claimed a problem has created a patch or other solution they should reply to the event with a kind 1 note explaining the solution or linking to a pull request etc, and include the tag patched.

If a problem looks to be bigger or more complicated than something that can be solved in less than 6 hours of working time, maintainers should set the status to big needs children because it's too big.

If a problem has open children maintainers should set the status to children.

StatusValid Next StatesNotes
openchildren claimed patched closed
childrenopenOnly once all children are closed
bigchildren
claimedopen patched closed
patchedopen claimed closed
closedopenre-opening a closed problem