Status: In Development (Request For Comments)
Scratchpad for laying out a roadmap for issue tracking & management within the FreeBSD Project.
Roadmap will not solely be a list of proposed features and changes. It is a master plan [1] documenting the primary purpose (its raison d'être), to create the basis for informing changes and improving decision making, independent of the issue tracking and management solution the project uses.
This roadmap is primarily motivated by and targeted towards bridging the wide information and expectations gap that exists for users (bug reporters, contributors, developers) of the system, specifically relating to their participation, value and impact in, and understanding of the process.
If you're interested in improving issue management within the Project, or would otherwise like to improve this Roadmap or other related documentation, don't hesitate to get in touch on #freebsd-bugs on Libera.Chat IRC.
Context
Challenges
Perception: Issue tracking “a chore”, “not worth” reporting bugs
Scale: More bugs, bigger queue
Inaction: Lack of knowledge, experience, doubt or fear of doing the wrong thing (publicly) preventing action
Consistency: Inconsistent handling, requirements, process by different people/groups creates dissonance
Remit/Role: Overlap into “reviews / pull-request” type systems/workflows, other channels (eg: mailing lists for bug reports/discussions)
Purpose
The purpose of issue tracking/management, in any form, structured (issue tracking system), unstructured (email), formal or informal, is to facilitate effective product improvement
Other purposes include:
Transparency: A public nexus for collaboration and communication
Insight: Provides data about a projects product and practices
Knowledge: Provides a history of who, what when, where, how and why. “If it's not tracked it doesn't exist”
Principles
Values
Goals
Potential Improvements/Changes
Automatic MAINTAINER approval of patches
We want maintainers to approve patches (attachments), not use comments or or the issue-level maintainer-feedback flag (as some currently do).
Bugzilla permissions are: anyone can edit a bug/field they have created themselves, or set a flag if they are the target of the flags ? <email> value.
Maintainers can't approve ports patches created by someone else, unless someone sets maintainer-approval attachment flag to ? first.
For ports issues with attachments, automatically set maintainer-approval ? <MAINTAINER-email> on attachments
This would also be useful in the general and src cases, to test if patches [still] apply, and do things accordingly (–
KubilayKocak 2021-06-02 12:04:35+1000 via
MarkLinimon via
WarnerLosh)
New Ports Component for new ports
Getting new ports into the tree is something we want to encourage
New ports take relatively more initiative and time to produce
Issues for new ports can often get lost in the noise of ports updates/bug reports
Resolution time for new ports is often substantially longer to commit than other change proposals, which can demotivate people
There is no consistent/comprehensive way to categorize new ports beyond Keywords: feature and Summary: [NEW PORT]
Summary tags like [NEW PORT] are user-set, and we are actively discouraging [tag] use in Summaries in favour of more structured metadata
So, create a new Component in the Ports & Packages Product, such as New Port specifically for new ports (ports that don't yet exist in the tree)
Allows people who might be specifically interested in bringing in new ports to more easily find/work on them.
Precludes the need for Summary [tags]
Allows us to more easily see the 'queue' length without resorting to string parsing Summaries
Components with Default Assignees, also added to CC by default
Some Components have a specific default Assignee, either real users, or mailing-lists, to assist discovery of particular categories of issues
Examples include: Ports & Packages Component issues with MAINTAINER's (not ports-bugs@f.o), Product::Base networking issues (Assignee: net@f.o)
In most cases, it is desirable for the default assignee to remain informed of issue updates even if they're no longer the Assignee
We presently do not automatically add Assignee's to the CC field, but we do it manually (particularly for examples above)
Accordingly, consider adding a Components Default Assignee to Default CC list too.
Issue: We don't want to do this for “Ports” because ports-bugs is used effectively to mean Unassigned, and if it were on the CC list, every change for every issue would goto the list. SNR too low for that change
Needs: Very clear definition of when to, or not to add Assignee to Default CC list.
More/Granular/Meaningful Components
The current list of components (in the Base Product) is highly repository/directory oriented, and is not granular enough.
Eg: Product :: Base System kern and misc components are too widely-scoped
Eg: Product :: Base System standards and arm components are ambiguous
Components are the primary categorization mechanism in Bugzilla
Issues can live in only one component at a time.
Components can have Default Assignee's and Default CC lists
Components have descriptions (to help people figure out what to, and what not to) categorize there.
Components are the primary way that issues can find themselves their most relevant (as a first step) audience (developers)
Components names should be as clear as possible to the user with regard to what issues should be reported there
Reporters shouldn't require any knowledge about the project or its arcana (repo locations) to report into the correct component successfully
Components within a single a Product should be as semantically mutually exclusive as possible
Accordingly, come up with a scheme for more components in base
Issue: the longer the list the harder it is for users to report correctly, and increases incorrect classification (and therefore SNR–)
-
Example: a component per directory/driver feels like too granular/much
Example: a 'networking' (currently 'net') feels like not granular enough, though it is currently assigned to net@f.o mailing list
Some prelim scheme guidelines:
things that aren't long-lived should probably be keywords
things that can apply to multiple classes of things should probably not be components
Widely-scoped components could potentially be separate products with their own components, where it makes sense.
Eg: Product: Device Drivers Component: <list of drivers>
Eg: Product: Firewalls Component: <ipfw, pf, ipfilter>
Confusing existing examples:
conf, standards (can apply to any component), gnu
Likely Examples:
“Linux Emulation” a major 'feature' of Base. Has an actual, known or effectively maintainer or set of committer(s) that are familiar with that area.
Toolchain, ZFS, FuseFS (or Product::Filesystems Components: ZFS | FuseFS | UFS | etc
Installer
Audio & Sound
Virtual Memory Subsystem
Network File System (NFS)
Maybe/Unsure Examples:
Netmap, DTrace, Bluetooth, GEOM, IPFW/PF (“Firewalls”?) IPFilter (has a maintainer), Jails,
PkgBase (not an
ongoing 'base' component?), RC, ACPI
Project specific, potentially with dedicated people/teams: Reproducibility
What to do with:
“tests”. Testing & CI is a project team with its own infra, processes, not strictly 'tests'. Possible rename “Testing & CI”
What about a future unified Testing & CI team across repo's (in particular base/ports but also docs)
'freebsd-update' (the command). Major user feature, single binary. Different from Services::FreeBSD Update (the service, and infrastructure)
Specific projects, like MAC, TrustedBSD, libxo etc that can touch many other component code
Other Notes / Thoughtstream
Maintainer change / reset → reset/reassign existing assigned issues
Consider Send Upstream style resolution: less blunt than Not Accepted, not really satisfied that existing resolution are more appropriate (?)
The Severity field values (Affects: Only Me, Some People, Many People) are not great. Come up with a better scheme that is meaningful and not arbitrary (ala 'Low/Medium/High')
Generic feedback flag, issue and attachment level. Maybe attachment one is called review. Currently we only have a maintainer-feedback flag, which we sometimes use to ask for feedback from reporters or committers (who are, ostensibly, not-maintainers), which can confuse some people.
attachment review flag needs to be considered in tandem with needs-qa which implies similar, but without a specific target/person to whom it is directed (unlike flags)
Improve Auto-Assigner UX in certain cases
MAINTAINER doesn't have Bugzilla account with that email. Ask maintainer to make them match, make AA comment better
Unmaintained ports, add comment with messaging about considering becoming a maintainer
TriageBot
Auto search stale (no changes in <period>), add issue is stale comment, close requesting re-open if still an issue
Auto search assignee timeout: assigned to @freebsd.org and (no changes in <period>, reset Assignee, add comment
On Status→Close - Assign issue to closer, unless already assigned to !Nobody
Automate 'Maintainer timeout' “pings” (reminders) on issues
Often times, the Auto-Assigner cant determine a maintainer. In this case, Triage needs to identify the issue, lookup maintainers manually (ports or otherwise), and update Assignee/maintainer-feedback. It would be nice to reduce the manual'ness of this where we can and it doesnt create more issues. 'Re-Run AA' might be something that can help (–
KubilayKocak 2021-06-02 12:11:42+1000 via
MarkLinimon)
References/Addenda