I extracted all labels from my local COB cache:
sqlite3 ~/.radicle/cobs/cache.db \
"select distinct json_extract(issue, '$.labels') from issues;" \
| jq -rs 'flatten | sort | unique | .[]'
This prints a total of 92 labels, which I reproduce in a compact form for completeness:
Inbox
RPB:column:awaiting review
RPB:column:doing
RPB:column:done
RPB:priority:x (many of these, where x is an integer)
UI Fix
UI fix
UX Refine
bug
c:beginner
chore
design
documentation
e:low
enhancement
feature
feature improvement
feature request
generic task
good first issue
in-review
onboarding
p:high
p:later
p:low
p:medium
p:next
p:now
radicle-explorer
sync
t:bug
t:feature
t:maintenance
test
ui
ux
v1.0
I notice patterns:
- Namespacing via
:, e.g.RPB:…for “Radicle Planning Board”. - “Values” after the last colon, e.g.
p:high(priority is high),p:low(priority is low). - There are duplicates resulting from variations in capitalization, e.g.
UI Fixvs.UI fix.
I would like to propose:
- Keep namespacing by colon
:. - Instead of denoting values after the last colon, use the symbol
=to separate between keys and values. Thus, I would preferp=highoverp:high, andRPB:column=doingoverRPB:column:doing. - When in doubt, use lowercase. Thus, I would prefer
rpb:column=doingoverRPB:column=doing.
In the following I use the terms “label” and “tag” interchangeably.
The reason for proposal (1.) is that I do see a value in a tag without a value. However, it becomes harder to distinguish a tag without value from a namespaced one if the separator for namespacing and the separator between key and value are identical.
My opinion is inspired by tags in OpenStreetMap. See https://wiki.openstreetmap.org/wiki/Tags and https://taginfo.openstreetmap.org/. Like with OSM, I would not want to impose a particular tagging scheme globally, but propose the above for the heartwood repository, ones closely related to Radicle itself, and when we implement tooling based on tags.
This issue should serve as a place for discussion of tagging schemes, in particular for the repositories maintained by the Radicle team.
I wonder if the namespacing and key=value pairs are even necessary? I think a new userland cob could be better suited for arranging these items on a timeline. But in general what you propose is better than what we have in the wild, so +1.
Probably not strictly necessary, but I do understand the sentiment to encode “attributes” (e.g. priority) of an issue in an ordinal dimension (e.g. low, medium, high). Also, I do understand that the developers of the planning board decided to namespace the labels they would use. There are repositories on GitHub that have literally hundreds of labels, see e.g. https://github.com/NixOS/nixpkgs/labels, in this case you get lost without grouping/namespacing them somehow.
And that COB would contain the Issue ID, the lane it is in, and its position within that lane? Sure! I also thought about that. Thing is that tags are already there right now, and I wanted to share my opinion. Such a COB, while it sounds reasonable to have one, is still to be developed.
Thanks for starting the discussion! This sounds reasonable to me :) So, to follow on I’ll kick off what categories we should have.
We can take inspiration from the above and label all our
heartwoodlabels ashw– it might be redundant inheartwooditself, but in the global cob cache, it’s at least distinct then. Happy to not use this prefix too.Following that, we could have an optional crate specifier:
cli,node,rh(remote-helper),cob,crypto,dag,fetch, etc.I like the shorthand,
p, for priority. I don’t mind if it’s numeric or ordinal.I think we should be able to group them into some kind of milestone tag, or maybe even quarters (
q1,q2,q3,q4)?So as an example, we have a research issue for investigating revoked keys and their interaction with sigrefs, I want to label it so that it gets done this quarter with:
hw:p=highhw:q2Another example, Lorenz has an issue about improving the CLI output of
rad sync, that doesn’t have to be done so soon:hw:clihw:p=mediumhw:q2He had too much work to do in this quarter so the label is changed:hw:q3What do you think? :)
I actually think that the name of the repository itself is a bad example for a namespace, but it’s just my gut feeling.
Good examples or where it’s necessary IMO:
rad:…, not the repository)lorenz:…, maybe even for their personal tooling.I don’t think that distinction in the global COB cache is a good measure. It was just one way for me to obtain the list.
I would like to avoid
hw:…. We could think aboutrad:…orxyz.radicle:…for things we want cross-repo and for which we don’t want to start polluting the “global namespace”.I would make that
crate=cli, or if we want to be pedantic,rust:crate=cli, or very pedanticio.crates:crate=radicle-cli. I would also like to avoid abbreviations then, i.e.crate=radicle-remote-helperinstead ofcrate=rhor evenrh. One might be inclined to drop the prefixradicle-but then the question arises how to handle theradiclecrate. Also note that we will hit issues that touch multiple crates. In this case I would like to propose to follow OSM again, and split values using;, e.g.crate=radicle-cli;radicle-cob.Milestones sound good, I would not use them as keys, however, but as values, e.g.
milestone=x.I dislike to specify quarters without years, this creates overlaps every 12 months. As you know I am a proponent of ISO 8601, and would like to propose to use a format that is compatible with it. That might mean a date like
2025-06-31or a week like2025-W27. For quarters, we could use the non-standard notation2025-Q2,2025-Q3,2025-Q4,2026-Q1, … inspired by the notation of weeks in ISO 8601 which spans from2025-W1to2025-W52. Again, I would also use this together with a key, likedue=2025-Q3.I’d counter that with
crate=radicle-clip=mediumdue=2025-Q2Great! I am not opinionated on the matter, and this works great for me :)