Report from Project 7.x-2.0 BADCamp Sprint

Taking advantage of the immense Drupal talent in town for BADCamp we decided to host a sprint to redesign the Project* suite for Drupal 7. We had a great turn-out of Drupal rockstars who wanted to help get closer to running D7 and to help with the future of our community's collaboration tools. In person, we had:

Attending remotely (for at least parts of the sprint), we had:


Battle plans

Everyone had a lively discussion at the start of the sprint on the basic UX and architecture for the D7 versions of the Project* suite. We decided that although we definitely want multiple node types that can behave as projects and issues, we didn’t need to make these their own top-level entity types and that we basically want everything leaving them as nodes gives us. Plus it’s less work for data migration.

In terms of the issue user experience, instead of the code and UI/UX complexity of trying to turn comment forms into issue editing forms, we’ve decided it’s going to be better all the way around to just let people edit issues directly and change all the meta data that way. When this happens, we’re going to generate a comment describing the change. We’ll use the revision log message from your edit as the body of the comment, and also include all the differences to issue fields (so reading an issue will look pretty much like it does now). The UI will be enhanced so it’s not just clicking on the edit tab, but effectively, that’s how it’s going to work. We had some debates about if these should be actual comments or a per-issue activity stream since both approaches have a number of pros and cons. We’re leaning towards just using comments since lots of other plumbing will continue to Just Work(tm) if we do that. It’d sure be nice if core supported multiple comment entity bundles on a single node type, but alas, that’s not the case. So, we might switch gears and move to an issue activity entity approach down the road.

We also decided that release nodes have so much custom magic, they’re going to be our lowest priority for doing a deep port to core fields. We’d like to do that eventually, but the win we get from doing this for projects and issues is huge, while the win on releases is less obvious. Since we have limited time/resources, we need to pick our battles.

New Git branches

dww started the morning by creating and pushing 6.x-1.x branches for and, then created 7.x-2.x branches of both, cleared out a ton of obsolete code, and pushed those to as well. This is where many of the changes from the sprint are being pushed.

Viewing node changes as comments

To enable the new issue queue experience of directly editing the issue to change anything, chx worked on cleaning up the project for use on issue comments. Those efforts are currently living at And by day two, we now have which does all the magic of posting comments that display the diff whenever a node is edited with a new revision.

Machine name field

beejeebus and hunmonk built the module, which provides a machine name field for any entity. This takes advantage of the D7 FormAPI machine_name form element #type and exposes it as a Field API field you can attach to any entity bundle. We’re using this for the project shortname on project node types, but since it could be useful to anyone, we published it as a separate project.

Project node type with core fields

hunmonk wrote code to define a default project node type with core fields for title, body, a machine name field (see above) and the project’s allowed components. This lives in the 7.x-2.x branch of We explored the possibility of doing this via a Feature, but it turns out that makes it harder to customize these node types and manage them in your own features. So instead, the node type is just a default type created when project.module is installed, and sites are free to customize this type (or create others to act as a project node type) and manage those customizations however they see fit (using features or otherwise).

Project issue node type with core fields

dww wrote code to define a default project_issue node type with core fields for things like priority, status, category, etc. He started fleshing out the more tricky fields like component where the allowed values on the issue should be populated by a multi-valued field on the parent project and the assigned user (which needs to know the specific issue node and project that issue belongs to for determining the allowed values). This code is in the 7.x-2.x branch of

Project install profile

mlncn built the install profile. Although we’ve had the profile for many years, we just wanted a drush make file and install profile to make it easy for sprinters (or anyone else) to assemble all the requirements for the Project* suite to get a D7 dev site up and running. Especially since we’re trying to move as much functionality out into generic solutions as possible, we need a simple way to satisfy all the dependencies. We’ll probably build out a D6 branch of this in the future to serve as a simple place to get a simple issue tracking collaboration site up.

Data migration

Moshe worked on starting to build out the project_migrate family of modules to be able to migrate data out of the D6 schema into the new node types and core fields we’re fleshing out for the D7 versions of everything. This code doesn’t yet live in a sandbox (Moshe had to leave a bit early to catch a flight) but it’ll be folded into project, project_issue and the drupalorg_project D7 sandbox ASAP.

UX/UI research

kyle_matthews worked on researching the user experience and interfaces for a number of existing issue tracking systems to find common patterns and functionality and see how that compares to our existing interface and our ideas about the new interactions we’re planning to build. The results can be found in this flickr set and at this Google doc: porting preparations

drumm mostly worked on looking at porting tasks, planning out automated dev and staging environments once more dependencies have been ported to D7, etc. Meanwhile, beejeebus started a sandbox for a D7 version of the drupalorg_project module (which is part of the project) so we can already start putting code into the right place. For now, that all lives at (since we didn’t want to create a 7.x-1.x branch of the drupalorg project yet since that makes it much harder to maintain the live

hunmonk built and exported the initial features for the Module and Theme node types that will be used on, and pushed them to the sandbox.

Next steps

There’s still a ton of work to do. Even from a project management standpoint, there are a ton of issues that need to be posted, plans drawn up, etc. Since we didn’t have a dedicated project manager on the sprint, we decided to prioritize Getting Things Done and trying to circle back to draw up future plans once we’ve had a chance to digest the results of our work and have some of the follow-up discussions that need to happen. For now, anyone interested in helping can follow either/both of these issues:
#834252: [meta] Port Project to Drupal 7
#963426: [meta] Port Project issue tracking to Drupal 7
There are also now 7.x-2.x-dev versions in both issue queues, so you can keep an eye on these:
Stay tuned for another update once we’ve got a more specific roadmap hashed out and/or another sprint planned.

Thanks again to everyone who participated!


Thanks for the great writeup!

Thanks for the great writeup!

Next sprint is happening now

Next sprint is happening now during the D7 Upgrade Initiative. Follow us at