Trac to Phabricator (Maniphest) migration prototype

Dear devs, I have completed writing a migration which moves tickets from trac to phabricator. The conversion is essentially lossless. The trac transaction history is replayed which means all events are transferred with their original authors and timestamps. I welcome comments on the work I have done so far, especially bugs as I have definitely not looked at all 12000 tickets. http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com All the user accounts are automatically generated. If you want to see the tracker from your perspective then send me an email or ping me on IRC and I can set the password of the relevant account. NOTE: This is not a decision, the existence of this prototype is to show that the migration is feasible in a satisfactory way and to remove hypothetical arguments from the discussion. I must also thank Dan Palmer and Herbert who helped me along the way. Dan was responsible for the first implementation and setting up much of the infrastructure at the Haskell Exchange hackathon in October. We extensively used the API bindings which Herbert had been working on. Further information below! Matt ===================================================================== Reasons ====== Why this change? The main argument is consolidation. Having many different services is confusing for new and old contributors. Phabricator has proved effective as a code review tool. It is modern and actively developed with a powerful feature set which we currently only use a small fraction of. Trac is showing signs of its age. It is old and slow, users regularly lose comments through accidently refreshing their browser. Further to this, the integration with other services is quite poor. Commits do not close tickets which mention them and the only link to commits is a comment. Querying the tickets is also quite difficult, I usually resort to using google search or my emails to find the relevant ticket. Why is Phabricator better? ==================== Through learning more about Phabricator, there are many small things that I think it does better which will improve the usability of the issue tracker. I will list a few but I urge you to try it out. * Commits which mention ticket numbers are currently posted as trac comments. There is better integration in phabricator as linking to commits has first-class support. * Links with differentials are also more direct than the current custom field which means you must update two places when posting a differential. * Fields are verified so that mispelling user names is not possible (see #12623 where Ben mispelled his name for example) * This is also true for projects and other fields. Inspecting these fields on trac you will find that the formatting on each ticket is often quite different. * Keywords are much more useful as the set of used keywords is discoverable. * Related tickets are much more substantial as the status of related tickets is reflected to parent ticket. (http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T7724) Implementation ============ Keywords are implemented as projects. A project is a combination of a tag which can be used with any Phabricator object, a workboard to organise tasks and a group of people who care about the topic. Not all keywords are migrated. Only keywords with at least 5 tickets were added to avoid lots of useless projects. The state of keywords is still a bit unsatisfactory but I wanted to take this chance to clean them up. Custom fields such as architecture and OS are replaced by *projects* just like keywords. This has the same advantage as other projects. Users can be subscribed to projects and receive emails when new tickets are tagged with a project. The large majority of tickets have very little additional metadata set. I also implemented these as custom fields but found the the result to be less satisfactory. Some users who have trac accounts do not have phab accounts. Fortunately it is easy to create new user accounts for these users which have empty passwords which can be recovered by the appropriate email address. This means tickets can be properly attributed in the migration. The ticket numbers are maintained. I still advocate moving the infrastructure tickets in order to maintain this mapping. Especially as there has been little activity in thr the last year. Tickets are linked to the relevant commits, differentials and other tickets. There are 3000 dummy differentials which are used to test that the linking works correctly. Of course with real data, the proper differential would be linked.(http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T11044) There are a couple of issues currently with the migration. There are a few issues in the parser which converts trac markup to remarkup. Most comments have very simple with just paragraphs and code blocks but complex items like lists are sometimes parsed incorrectly. Definition lists are converted to tables as there are no equivalent in remarkup. Trac ticket links are converted to phab ticket links. The ideal time to migrate is before the end of January The busiest time for the issue tracker is before and after a new major release. With 8.2 planned for around April this gives the transition a few months to settle. We can close the trac issue tracker and continue to serve it or preferably redirect users to the new ticket. I don't plan to migrate the wiki at this stage as I do not feel that the parser is robust enough although there are now few other technical challenges blocking this direction.

Hi Matthew,
Great work! I must admit I'm one of the few that generally likes Trac but
I'm liking this quite a lot.
Just two questions,
Is it possible for those like me who have a different username on trac and
phabricator to get mapped correctly?
And how does the ticket creation process look? I tried it but needed to
login. Do you get a set of projects you have to pick? Like the custom
fields we have now or is it just one box where you have to add stuff to all
in one line?
Kind regards,
Tamar
On Wed, 21 Dec 2016, 10:13 Matthew Pickering,
Dear devs,
I have completed writing a migration which moves tickets from trac to phabricator. The conversion is essentially lossless. The trac transaction history is replayed which means all events are transferred with their original authors and timestamps. I welcome comments on the work I have done so far, especially bugs as I have definitely not looked at all 12000 tickets.
http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com
All the user accounts are automatically generated. If you want to see the tracker from your perspective then send me an email or ping me on IRC and I can set the password of the relevant account.
NOTE: This is not a decision, the existence of this prototype is to show that the migration is feasible in a satisfactory way and to remove hypothetical arguments from the discussion.
I must also thank Dan Palmer and Herbert who helped me along the way. Dan was responsible for the first implementation and setting up much of the infrastructure at the Haskell Exchange hackathon in October. We extensively used the API bindings which Herbert had been working on.
Further information below!
Matt
=====================================================================
Reasons ======
Why this change? The main argument is consolidation. Having many different services is confusing for new and old contributors. Phabricator has proved effective as a code review tool. It is modern and actively developed with a powerful feature set which we currently only use a small fraction of.
Trac is showing signs of its age. It is old and slow, users regularly lose comments through accidently refreshing their browser. Further to this, the integration with other services is quite poor. Commits do not close tickets which mention them and the only link to commits is a comment. Querying the tickets is also quite difficult, I usually resort to using google search or my emails to find the relevant ticket.
Why is Phabricator better? ====================
Through learning more about Phabricator, there are many small things that I think it does better which will improve the usability of the issue tracker. I will list a few but I urge you to try it out.
* Commits which mention ticket numbers are currently posted as trac comments. There is better integration in phabricator as linking to commits has first-class support. * Links with differentials are also more direct than the current custom field which means you must update two places when posting a differential. * Fields are verified so that mispelling user names is not possible (see #12623 where Ben mispelled his name for example) * This is also true for projects and other fields. Inspecting these fields on trac you will find that the formatting on each ticket is often quite different. * Keywords are much more useful as the set of used keywords is discoverable. * Related tickets are much more substantial as the status of related tickets is reflected to parent ticket. (http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T7724)
Implementation ============
Keywords are implemented as projects. A project is a combination of a tag which can be used with any Phabricator object, a workboard to organise tasks and a group of people who care about the topic. Not all keywords are migrated. Only keywords with at least 5 tickets were added to avoid lots of useless projects. The state of keywords is still a bit unsatisfactory but I wanted to take this chance to clean them up.
Custom fields such as architecture and OS are replaced by *projects* just like keywords. This has the same advantage as other projects. Users can be subscribed to projects and receive emails when new tickets are tagged with a project. The large majority of tickets have very little additional metadata set. I also implemented these as custom fields but found the the result to be less satisfactory.
Some users who have trac accounts do not have phab accounts. Fortunately it is easy to create new user accounts for these users which have empty passwords which can be recovered by the appropriate email address. This means tickets can be properly attributed in the migration.
The ticket numbers are maintained. I still advocate moving the infrastructure tickets in order to maintain this mapping. Especially as there has been little activity in thr the last year.
Tickets are linked to the relevant commits, differentials and other tickets. There are 3000 dummy differentials which are used to test that the linking works correctly. Of course with real data, the proper differential would be linked.(http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T11044)
There are a couple of issues currently with the migration. There are a few issues in the parser which converts trac markup to remarkup. Most comments have very simple with just paragraphs and code blocks but complex items like lists are sometimes parsed incorrectly. Definition lists are converted to tables as there are no equivalent in remarkup. Trac ticket links are converted to phab ticket links.
The ideal time to migrate is before the end of January The busiest time for the issue tracker is before and after a new major release. With 8.2 planned for around April this gives the transition a few months to settle. We can close the trac issue tracker and continue to serve it or preferably redirect users to the new ticket. I don't plan to migrate the wiki at this stage as I do not feel that the parser is robust enough although there are now few other technical challenges blocking this direction. _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Is it possible for those like me who have a different username on trac and phabricator to get mapped correctly?
Yes, definitely. I would need to work out exactly what to do about user accounts, for this I just created accounts with the same names. There are two things to consider about a more intelligent mapping. 1. People who have different names on each site. 2. People who don't have phab accounts but do have trac accounts.
And how does the ticket creation process look? I tried it but needed to login. Do you get a set of projects you have to pick? Like the custom fields we have now or is it just one box where you have to add stuff to all in one line?
I sent you some login details so you can try it out.
Kind regards, Tamar
Matt
On Wed, 21 Dec 2016, 10:13 Matthew Pickering,
wrote: Dear devs,
I have completed writing a migration which moves tickets from trac to phabricator. The conversion is essentially lossless. The trac transaction history is replayed which means all events are transferred with their original authors and timestamps. I welcome comments on the work I have done so far, especially bugs as I have definitely not looked at all 12000 tickets.
http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com
All the user accounts are automatically generated. If you want to see the tracker from your perspective then send me an email or ping me on IRC and I can set the password of the relevant account.
NOTE: This is not a decision, the existence of this prototype is to show that the migration is feasible in a satisfactory way and to remove hypothetical arguments from the discussion.
I must also thank Dan Palmer and Herbert who helped me along the way. Dan was responsible for the first implementation and setting up much of the infrastructure at the Haskell Exchange hackathon in October. We extensively used the API bindings which Herbert had been working on.
Further information below!
Matt
=====================================================================
Reasons ======
Why this change? The main argument is consolidation. Having many different services is confusing for new and old contributors. Phabricator has proved effective as a code review tool. It is modern and actively developed with a powerful feature set which we currently only use a small fraction of.
Trac is showing signs of its age. It is old and slow, users regularly lose comments through accidently refreshing their browser. Further to this, the integration with other services is quite poor. Commits do not close tickets which mention them and the only link to commits is a comment. Querying the tickets is also quite difficult, I usually resort to using google search or my emails to find the relevant ticket.
Why is Phabricator better? ====================
Through learning more about Phabricator, there are many small things that I think it does better which will improve the usability of the issue tracker. I will list a few but I urge you to try it out.
* Commits which mention ticket numbers are currently posted as trac comments. There is better integration in phabricator as linking to commits has first-class support. * Links with differentials are also more direct than the current custom field which means you must update two places when posting a differential. * Fields are verified so that mispelling user names is not possible (see #12623 where Ben mispelled his name for example) * This is also true for projects and other fields. Inspecting these fields on trac you will find that the formatting on each ticket is often quite different. * Keywords are much more useful as the set of used keywords is discoverable. * Related tickets are much more substantial as the status of related tickets is reflected to parent ticket. (http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T7724)
Implementation ============
Keywords are implemented as projects. A project is a combination of a tag which can be used with any Phabricator object, a workboard to organise tasks and a group of people who care about the topic. Not all keywords are migrated. Only keywords with at least 5 tickets were added to avoid lots of useless projects. The state of keywords is still a bit unsatisfactory but I wanted to take this chance to clean them up.
Custom fields such as architecture and OS are replaced by *projects* just like keywords. This has the same advantage as other projects. Users can be subscribed to projects and receive emails when new tickets are tagged with a project. The large majority of tickets have very little additional metadata set. I also implemented these as custom fields but found the the result to be less satisfactory.
Some users who have trac accounts do not have phab accounts. Fortunately it is easy to create new user accounts for these users which have empty passwords which can be recovered by the appropriate email address. This means tickets can be properly attributed in the migration.
The ticket numbers are maintained. I still advocate moving the infrastructure tickets in order to maintain this mapping. Especially as there has been little activity in thr the last year.
Tickets are linked to the relevant commits, differentials and other tickets. There are 3000 dummy differentials which are used to test that the linking works correctly. Of course with real data, the proper differential would be linked.(http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T11044)
There are a couple of issues currently with the migration. There are a few issues in the parser which converts trac markup to remarkup. Most comments have very simple with just paragraphs and code blocks but complex items like lists are sometimes parsed incorrectly. Definition lists are converted to tables as there are no equivalent in remarkup. Trac ticket links are converted to phab ticket links.
The ideal time to migrate is before the end of January The busiest time for the issue tracker is before and after a new major release. With 8.2 planned for around April this gives the transition a few months to settle. We can close the trac issue tracker and continue to serve it or preferably redirect users to the new ticket. I don't plan to migrate the wiki at this stage as I do not feel that the parser is robust enough although there are now few other technical challenges blocking this direction. _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Nice work! Would it be possible to convert comment references too? For instance in http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T10547#182793 "comment:21" should be a link to the label #178747 If we do the transfer, we should redirect: https://ghc.haskell.org/trac/ghc/ticket/{NN}#comment:{CC} to phabricator.haskell.org/T{NN}#{tracToPhabComment(NN,CC)} where "tracToPhabComment" function remains to be written ;-) Thanks, Sylvain On 21/12/2016 11:12, Matthew Pickering wrote:
Dear devs,
I have completed writing a migration which moves tickets from trac to phabricator. The conversion is essentially lossless. The trac transaction history is replayed which means all events are transferred with their original authors and timestamps. I welcome comments on the work I have done so far, especially bugs as I have definitely not looked at all 12000 tickets.
http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com
All the user accounts are automatically generated. If you want to see the tracker from your perspective then send me an email or ping me on IRC and I can set the password of the relevant account.
NOTE: This is not a decision, the existence of this prototype is to show that the migration is feasible in a satisfactory way and to remove hypothetical arguments from the discussion.
I must also thank Dan Palmer and Herbert who helped me along the way. Dan was responsible for the first implementation and setting up much of the infrastructure at the Haskell Exchange hackathon in October. We extensively used the API bindings which Herbert had been working on.
Further information below!
Matt
=====================================================================
Reasons ======
Why this change? The main argument is consolidation. Having many different services is confusing for new and old contributors. Phabricator has proved effective as a code review tool. It is modern and actively developed with a powerful feature set which we currently only use a small fraction of.
Trac is showing signs of its age. It is old and slow, users regularly lose comments through accidently refreshing their browser. Further to this, the integration with other services is quite poor. Commits do not close tickets which mention them and the only link to commits is a comment. Querying the tickets is also quite difficult, I usually resort to using google search or my emails to find the relevant ticket.
Why is Phabricator better? ====================
Through learning more about Phabricator, there are many small things that I think it does better which will improve the usability of the issue tracker. I will list a few but I urge you to try it out.
* Commits which mention ticket numbers are currently posted as trac comments. There is better integration in phabricator as linking to commits has first-class support. * Links with differentials are also more direct than the current custom field which means you must update two places when posting a differential. * Fields are verified so that mispelling user names is not possible (see #12623 where Ben mispelled his name for example) * This is also true for projects and other fields. Inspecting these fields on trac you will find that the formatting on each ticket is often quite different. * Keywords are much more useful as the set of used keywords is discoverable. * Related tickets are much more substantial as the status of related tickets is reflected to parent ticket. (http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T7724)
Implementation ============
Keywords are implemented as projects. A project is a combination of a tag which can be used with any Phabricator object, a workboard to organise tasks and a group of people who care about the topic. Not all keywords are migrated. Only keywords with at least 5 tickets were added to avoid lots of useless projects. The state of keywords is still a bit unsatisfactory but I wanted to take this chance to clean them up.
Custom fields such as architecture and OS are replaced by *projects* just like keywords. This has the same advantage as other projects. Users can be subscribed to projects and receive emails when new tickets are tagged with a project. The large majority of tickets have very little additional metadata set. I also implemented these as custom fields but found the the result to be less satisfactory.
Some users who have trac accounts do not have phab accounts. Fortunately it is easy to create new user accounts for these users which have empty passwords which can be recovered by the appropriate email address. This means tickets can be properly attributed in the migration.
The ticket numbers are maintained. I still advocate moving the infrastructure tickets in order to maintain this mapping. Especially as there has been little activity in thr the last year.
Tickets are linked to the relevant commits, differentials and other tickets. There are 3000 dummy differentials which are used to test that the linking works correctly. Of course with real data, the proper differential would be linked.(http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T11044)
There are a couple of issues currently with the migration. There are a few issues in the parser which converts trac markup to remarkup. Most comments have very simple with just paragraphs and code blocks but complex items like lists are sometimes parsed incorrectly. Definition lists are converted to tables as there are no equivalent in remarkup. Trac ticket links are converted to phab ticket links.
The ideal time to migrate is before the end of January The busiest time for the issue tracker is before and after a new major release. With 8.2 planned for around April this gives the transition a few months to settle. We can close the trac issue tracker and continue to serve it or preferably redirect users to the new ticket. I don't plan to migrate the wiki at this stage as I do not feel that the parser is robust enough although there are now few other technical challenges blocking this direction. _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

I just noticed that the instance was down because the disk quota had
been reached. I expanded the size of storage and it should be working
again.
Matt
On Wed, Dec 21, 2016 at 10:12 AM, Matthew Pickering
Dear devs,
I have completed writing a migration which moves tickets from trac to phabricator. The conversion is essentially lossless. The trac transaction history is replayed which means all events are transferred with their original authors and timestamps. I welcome comments on the work I have done so far, especially bugs as I have definitely not looked at all 12000 tickets.
http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com
All the user accounts are automatically generated. If you want to see the tracker from your perspective then send me an email or ping me on IRC and I can set the password of the relevant account.
NOTE: This is not a decision, the existence of this prototype is to show that the migration is feasible in a satisfactory way and to remove hypothetical arguments from the discussion.
I must also thank Dan Palmer and Herbert who helped me along the way. Dan was responsible for the first implementation and setting up much of the infrastructure at the Haskell Exchange hackathon in October. We extensively used the API bindings which Herbert had been working on.
Further information below!
Matt
=====================================================================
Reasons ======
Why this change? The main argument is consolidation. Having many different services is confusing for new and old contributors. Phabricator has proved effective as a code review tool. It is modern and actively developed with a powerful feature set which we currently only use a small fraction of.
Trac is showing signs of its age. It is old and slow, users regularly lose comments through accidently refreshing their browser. Further to this, the integration with other services is quite poor. Commits do not close tickets which mention them and the only link to commits is a comment. Querying the tickets is also quite difficult, I usually resort to using google search or my emails to find the relevant ticket.
Why is Phabricator better? ====================
Through learning more about Phabricator, there are many small things that I think it does better which will improve the usability of the issue tracker. I will list a few but I urge you to try it out.
* Commits which mention ticket numbers are currently posted as trac comments. There is better integration in phabricator as linking to commits has first-class support. * Links with differentials are also more direct than the current custom field which means you must update two places when posting a differential. * Fields are verified so that mispelling user names is not possible (see #12623 where Ben mispelled his name for example) * This is also true for projects and other fields. Inspecting these fields on trac you will find that the formatting on each ticket is often quite different. * Keywords are much more useful as the set of used keywords is discoverable. * Related tickets are much more substantial as the status of related tickets is reflected to parent ticket. (http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T7724)
Implementation ============
Keywords are implemented as projects. A project is a combination of a tag which can be used with any Phabricator object, a workboard to organise tasks and a group of people who care about the topic. Not all keywords are migrated. Only keywords with at least 5 tickets were added to avoid lots of useless projects. The state of keywords is still a bit unsatisfactory but I wanted to take this chance to clean them up.
Custom fields such as architecture and OS are replaced by *projects* just like keywords. This has the same advantage as other projects. Users can be subscribed to projects and receive emails when new tickets are tagged with a project. The large majority of tickets have very little additional metadata set. I also implemented these as custom fields but found the the result to be less satisfactory.
Some users who have trac accounts do not have phab accounts. Fortunately it is easy to create new user accounts for these users which have empty passwords which can be recovered by the appropriate email address. This means tickets can be properly attributed in the migration.
The ticket numbers are maintained. I still advocate moving the infrastructure tickets in order to maintain this mapping. Especially as there has been little activity in thr the last year.
Tickets are linked to the relevant commits, differentials and other tickets. There are 3000 dummy differentials which are used to test that the linking works correctly. Of course with real data, the proper differential would be linked.(http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T11044)
There are a couple of issues currently with the migration. There are a few issues in the parser which converts trac markup to remarkup. Most comments have very simple with just paragraphs and code blocks but complex items like lists are sometimes parsed incorrectly. Definition lists are converted to tables as there are no equivalent in remarkup. Trac ticket links are converted to phab ticket links.
The ideal time to migrate is before the end of January The busiest time for the issue tracker is before and after a new major release. With 8.2 planned for around April this gives the transition a few months to settle. We can close the trac issue tracker and continue to serve it or preferably redirect users to the new ticket. I don't plan to migrate the wiki at this stage as I do not feel that the parser is robust enough although there are now few other technical challenges blocking this direction.

Ahh, nightmare. The address changed on the reboot -- here is the new address.
http://ec2-52-211-40-21.eu-west-1.compute.amazonaws.com\
Matt
On Wed, Dec 21, 2016 at 10:12 AM, Matthew Pickering
Dear devs,
I have completed writing a migration which moves tickets from trac to phabricator. The conversion is essentially lossless. The trac transaction history is replayed which means all events are transferred with their original authors and timestamps. I welcome comments on the work I have done so far, especially bugs as I have definitely not looked at all 12000 tickets.
http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com
All the user accounts are automatically generated. If you want to see the tracker from your perspective then send me an email or ping me on IRC and I can set the password of the relevant account.
NOTE: This is not a decision, the existence of this prototype is to show that the migration is feasible in a satisfactory way and to remove hypothetical arguments from the discussion.
I must also thank Dan Palmer and Herbert who helped me along the way. Dan was responsible for the first implementation and setting up much of the infrastructure at the Haskell Exchange hackathon in October. We extensively used the API bindings which Herbert had been working on.
Further information below!
Matt
=====================================================================
Reasons ======
Why this change? The main argument is consolidation. Having many different services is confusing for new and old contributors. Phabricator has proved effective as a code review tool. It is modern and actively developed with a powerful feature set which we currently only use a small fraction of.
Trac is showing signs of its age. It is old and slow, users regularly lose comments through accidently refreshing their browser. Further to this, the integration with other services is quite poor. Commits do not close tickets which mention them and the only link to commits is a comment. Querying the tickets is also quite difficult, I usually resort to using google search or my emails to find the relevant ticket.
Why is Phabricator better? ====================
Through learning more about Phabricator, there are many small things that I think it does better which will improve the usability of the issue tracker. I will list a few but I urge you to try it out.
* Commits which mention ticket numbers are currently posted as trac comments. There is better integration in phabricator as linking to commits has first-class support. * Links with differentials are also more direct than the current custom field which means you must update two places when posting a differential. * Fields are verified so that mispelling user names is not possible (see #12623 where Ben mispelled his name for example) * This is also true for projects and other fields. Inspecting these fields on trac you will find that the formatting on each ticket is often quite different. * Keywords are much more useful as the set of used keywords is discoverable. * Related tickets are much more substantial as the status of related tickets is reflected to parent ticket. (http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T7724)
Implementation ============
Keywords are implemented as projects. A project is a combination of a tag which can be used with any Phabricator object, a workboard to organise tasks and a group of people who care about the topic. Not all keywords are migrated. Only keywords with at least 5 tickets were added to avoid lots of useless projects. The state of keywords is still a bit unsatisfactory but I wanted to take this chance to clean them up.
Custom fields such as architecture and OS are replaced by *projects* just like keywords. This has the same advantage as other projects. Users can be subscribed to projects and receive emails when new tickets are tagged with a project. The large majority of tickets have very little additional metadata set. I also implemented these as custom fields but found the the result to be less satisfactory.
Some users who have trac accounts do not have phab accounts. Fortunately it is easy to create new user accounts for these users which have empty passwords which can be recovered by the appropriate email address. This means tickets can be properly attributed in the migration.
The ticket numbers are maintained. I still advocate moving the infrastructure tickets in order to maintain this mapping. Especially as there has been little activity in thr the last year.
Tickets are linked to the relevant commits, differentials and other tickets. There are 3000 dummy differentials which are used to test that the linking works correctly. Of course with real data, the proper differential would be linked.(http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T11044)
There are a couple of issues currently with the migration. There are a few issues in the parser which converts trac markup to remarkup. Most comments have very simple with just paragraphs and code blocks but complex items like lists are sometimes parsed incorrectly. Definition lists are converted to tables as there are no equivalent in remarkup. Trac ticket links are converted to phab ticket links.
The ideal time to migrate is before the end of January The busiest time for the issue tracker is before and after a new major release. With 8.2 planned for around April this gives the transition a few months to settle. We can close the trac issue tracker and continue to serve it or preferably redirect users to the new ticket. I don't plan to migrate the wiki at this stage as I do not feel that the parser is robust enough although there are now few other technical challenges blocking this direction.

This looks good! Manuel
Am 21.12.2016 um 21:12 schrieb Matthew Pickering
: Dear devs,
I have completed writing a migration which moves tickets from trac to phabricator. The conversion is essentially lossless. The trac transaction history is replayed which means all events are transferred with their original authors and timestamps. I welcome comments on the work I have done so far, especially bugs as I have definitely not looked at all 12000 tickets.
http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com
All the user accounts are automatically generated. If you want to see the tracker from your perspective then send me an email or ping me on IRC and I can set the password of the relevant account.
NOTE: This is not a decision, the existence of this prototype is to show that the migration is feasible in a satisfactory way and to remove hypothetical arguments from the discussion.
I must also thank Dan Palmer and Herbert who helped me along the way. Dan was responsible for the first implementation and setting up much of the infrastructure at the Haskell Exchange hackathon in October. We extensively used the API bindings which Herbert had been working on.
Further information below!
Matt
=====================================================================
Reasons ======
Why this change? The main argument is consolidation. Having many different services is confusing for new and old contributors. Phabricator has proved effective as a code review tool. It is modern and actively developed with a powerful feature set which we currently only use a small fraction of.
Trac is showing signs of its age. It is old and slow, users regularly lose comments through accidently refreshing their browser. Further to this, the integration with other services is quite poor. Commits do not close tickets which mention them and the only link to commits is a comment. Querying the tickets is also quite difficult, I usually resort to using google search or my emails to find the relevant ticket.
Why is Phabricator better? ====================
Through learning more about Phabricator, there are many small things that I think it does better which will improve the usability of the issue tracker. I will list a few but I urge you to try it out.
* Commits which mention ticket numbers are currently posted as trac comments. There is better integration in phabricator as linking to commits has first-class support. * Links with differentials are also more direct than the current custom field which means you must update two places when posting a differential. * Fields are verified so that mispelling user names is not possible (see #12623 where Ben mispelled his name for example) * This is also true for projects and other fields. Inspecting these fields on trac you will find that the formatting on each ticket is often quite different. * Keywords are much more useful as the set of used keywords is discoverable. * Related tickets are much more substantial as the status of related tickets is reflected to parent ticket. (http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T7724)
Implementation ============
Keywords are implemented as projects. A project is a combination of a tag which can be used with any Phabricator object, a workboard to organise tasks and a group of people who care about the topic. Not all keywords are migrated. Only keywords with at least 5 tickets were added to avoid lots of useless projects. The state of keywords is still a bit unsatisfactory but I wanted to take this chance to clean them up.
Custom fields such as architecture and OS are replaced by *projects* just like keywords. This has the same advantage as other projects. Users can be subscribed to projects and receive emails when new tickets are tagged with a project. The large majority of tickets have very little additional metadata set. I also implemented these as custom fields but found the the result to be less satisfactory.
Some users who have trac accounts do not have phab accounts. Fortunately it is easy to create new user accounts for these users which have empty passwords which can be recovered by the appropriate email address. This means tickets can be properly attributed in the migration.
The ticket numbers are maintained. I still advocate moving the infrastructure tickets in order to maintain this mapping. Especially as there has been little activity in thr the last year.
Tickets are linked to the relevant commits, differentials and other tickets. There are 3000 dummy differentials which are used to test that the linking works correctly. Of course with real data, the proper differential would be linked.(http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T11044)
There are a couple of issues currently with the migration. There are a few issues in the parser which converts trac markup to remarkup. Most comments have very simple with just paragraphs and code blocks but complex items like lists are sometimes parsed incorrectly. Definition lists are converted to tables as there are no equivalent in remarkup. Trac ticket links are converted to phab ticket links.
The ideal time to migrate is before the end of January The busiest time for the issue tracker is before and after a new major release. With 8.2 planned for around April this gives the transition a few months to settle. We can close the trac issue tracker and continue to serve it or preferably redirect users to the new ticket. I don't plan to migrate the wiki at this stage as I do not feel that the parser is robust enough although there are now few other technical challenges blocking this direction. _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Thanks everyone for the comments so far.
If you use Trac regularly then please comment. Thinking this is a bad
idea but not commenting is not particularly useful as it leaves
everyone
in a limbo.
I moved the site to a smaller instance so it would cost me less money to host.
http://ec2-52-214-147-146.eu-west-1.compute.amazonaws.com/
Matt
On Wed, Dec 21, 2016 at 10:12 AM, Matthew Pickering
Dear devs,
I have completed writing a migration which moves tickets from trac to phabricator. The conversion is essentially lossless. The trac transaction history is replayed which means all events are transferred with their original authors and timestamps. I welcome comments on the work I have done so far, especially bugs as I have definitely not looked at all 12000 tickets.
http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com
All the user accounts are automatically generated. If you want to see the tracker from your perspective then send me an email or ping me on IRC and I can set the password of the relevant account.
NOTE: This is not a decision, the existence of this prototype is to show that the migration is feasible in a satisfactory way and to remove hypothetical arguments from the discussion.
I must also thank Dan Palmer and Herbert who helped me along the way. Dan was responsible for the first implementation and setting up much of the infrastructure at the Haskell Exchange hackathon in October. We extensively used the API bindings which Herbert had been working on.
Further information below!
Matt
=====================================================================
Reasons ======
Why this change? The main argument is consolidation. Having many different services is confusing for new and old contributors. Phabricator has proved effective as a code review tool. It is modern and actively developed with a powerful feature set which we currently only use a small fraction of.
Trac is showing signs of its age. It is old and slow, users regularly lose comments through accidently refreshing their browser. Further to this, the integration with other services is quite poor. Commits do not close tickets which mention them and the only link to commits is a comment. Querying the tickets is also quite difficult, I usually resort to using google search or my emails to find the relevant ticket.
Why is Phabricator better? ====================
Through learning more about Phabricator, there are many small things that I think it does better which will improve the usability of the issue tracker. I will list a few but I urge you to try it out.
* Commits which mention ticket numbers are currently posted as trac comments. There is better integration in phabricator as linking to commits has first-class support. * Links with differentials are also more direct than the current custom field which means you must update two places when posting a differential. * Fields are verified so that mispelling user names is not possible (see #12623 where Ben mispelled his name for example) * This is also true for projects and other fields. Inspecting these fields on trac you will find that the formatting on each ticket is often quite different. * Keywords are much more useful as the set of used keywords is discoverable. * Related tickets are much more substantial as the status of related tickets is reflected to parent ticket. (http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T7724)
Implementation ============
Keywords are implemented as projects. A project is a combination of a tag which can be used with any Phabricator object, a workboard to organise tasks and a group of people who care about the topic. Not all keywords are migrated. Only keywords with at least 5 tickets were added to avoid lots of useless projects. The state of keywords is still a bit unsatisfactory but I wanted to take this chance to clean them up.
Custom fields such as architecture and OS are replaced by *projects* just like keywords. This has the same advantage as other projects. Users can be subscribed to projects and receive emails when new tickets are tagged with a project. The large majority of tickets have very little additional metadata set. I also implemented these as custom fields but found the the result to be less satisfactory.
Some users who have trac accounts do not have phab accounts. Fortunately it is easy to create new user accounts for these users which have empty passwords which can be recovered by the appropriate email address. This means tickets can be properly attributed in the migration.
The ticket numbers are maintained. I still advocate moving the infrastructure tickets in order to maintain this mapping. Especially as there has been little activity in thr the last year.
Tickets are linked to the relevant commits, differentials and other tickets. There are 3000 dummy differentials which are used to test that the linking works correctly. Of course with real data, the proper differential would be linked.(http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T11044)
There are a couple of issues currently with the migration. There are a few issues in the parser which converts trac markup to remarkup. Most comments have very simple with just paragraphs and code blocks but complex items like lists are sometimes parsed incorrectly. Definition lists are converted to tables as there are no equivalent in remarkup. Trac ticket links are converted to phab ticket links.
The ideal time to migrate is before the end of January The busiest time for the issue tracker is before and after a new major release. With 8.2 planned for around April this gives the transition a few months to settle. We can close the trac issue tracker and continue to serve it or preferably redirect users to the new ticket. I don't plan to migrate the wiki at this stage as I do not feel that the parser is robust enough although there are now few other technical challenges blocking this direction.

Hi Matthew, Thanks for doing the work for setting up this prototype, it definitely helps in making an informed decision about the switch. Some comments: 1. In your original email, you stated that many of the custom fields were going to be replaced with Phabricator "projects" (their equivalent of tags). First, I noticed a little trouble where some fields were just completely lost. Compare: http://ec2-52-214-147-146.eu-west-1.compute.amazonaws.com/T8095 https://ghc.haskell.org/trac/ghc/ticket/8095 AFAICT, we lost version the bug was found in, architecture, component. I hope we can keep these details in the real migration! Also related tickets doesn't seem to be working (see example above); migration problem? 2. Following on to this, I am actually a fan of Trac having a separate field per logically distinct field, rather than GitHub style "EVERYTHING IS A TAG". The primary reason for this is during bug submission: I find that if everything is a tag, they all show up in a giant list of ALL THE TAGS, and I never bother adding all the fields I should. Whereas in Trac, every relevant field is in front of me, and I remember to toggle things as necessary. Sometimes they don't matter, but sometimes they do (e.g., arch!) and I think *seeing* every field you might want to field in is helpful for remembering, at least for me as an expert user. 3. One thing that is bad about Trac is that its built-in search bar is useless. So here, Phabricator is an improvement. However, it seems like Phabricator search is less good than Trac's advanced ticket query. Here's what I like about Trac's version: - It sorts by priority, and then by ticket number. There is a long tail of bugs that I don't really care about, and this sorting helps me ignore the low priority ones which I don't care about. I find sort-by-relevance *particularly frustrating* because I find that these search engines don't have particularly good relevance metrics, and the chronology hint of sorting by ticket number is much better. Phabricator doesn't offer any control over search. - Trac search devotes only one row per ticket, so it is really easy to scan through and find the one I'm looking for. Both GH and Phabricator insist on putting a useless second row, fluffing up the results and making it difficult to scan. - It searches tickets only. In Phabricator I always have to type in "Maniphest Task" into document types to get into the bug finding view. Maybe there's a way to setup default search for something like this? Thanks, Edward Excerpts from Matthew Pickering's message of 2016-12-21 10:12:56 +0000:
Dear devs,
I have completed writing a migration which moves tickets from trac to phabricator. The conversion is essentially lossless. The trac transaction history is replayed which means all events are transferred with their original authors and timestamps. I welcome comments on the work I have done so far, especially bugs as I have definitely not looked at all 12000 tickets.
http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com
All the user accounts are automatically generated. If you want to see the tracker from your perspective then send me an email or ping me on IRC and I can set the password of the relevant account.
NOTE: This is not a decision, the existence of this prototype is to show that the migration is feasible in a satisfactory way and to remove hypothetical arguments from the discussion.
I must also thank Dan Palmer and Herbert who helped me along the way. Dan was responsible for the first implementation and setting up much of the infrastructure at the Haskell Exchange hackathon in October. We extensively used the API bindings which Herbert had been working on.
Further information below!
Matt
=====================================================================
Reasons ======
Why this change? The main argument is consolidation. Having many different services is confusing for new and old contributors. Phabricator has proved effective as a code review tool. It is modern and actively developed with a powerful feature set which we currently only use a small fraction of.
Trac is showing signs of its age. It is old and slow, users regularly lose comments through accidently refreshing their browser. Further to this, the integration with other services is quite poor. Commits do not close tickets which mention them and the only link to commits is a comment. Querying the tickets is also quite difficult, I usually resort to using google search or my emails to find the relevant ticket.
Why is Phabricator better? ====================
Through learning more about Phabricator, there are many small things that I think it does better which will improve the usability of the issue tracker. I will list a few but I urge you to try it out.
* Commits which mention ticket numbers are currently posted as trac comments. There is better integration in phabricator as linking to commits has first-class support. * Links with differentials are also more direct than the current custom field which means you must update two places when posting a differential. * Fields are verified so that mispelling user names is not possible (see #12623 where Ben mispelled his name for example) * This is also true for projects and other fields. Inspecting these fields on trac you will find that the formatting on each ticket is often quite different. * Keywords are much more useful as the set of used keywords is discoverable. * Related tickets are much more substantial as the status of related tickets is reflected to parent ticket. (http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T7724)
Implementation ============
Keywords are implemented as projects. A project is a combination of a tag which can be used with any Phabricator object, a workboard to organise tasks and a group of people who care about the topic. Not all keywords are migrated. Only keywords with at least 5 tickets were added to avoid lots of useless projects. The state of keywords is still a bit unsatisfactory but I wanted to take this chance to clean them up.
Custom fields such as architecture and OS are replaced by *projects* just like keywords. This has the same advantage as other projects. Users can be subscribed to projects and receive emails when new tickets are tagged with a project. The large majority of tickets have very little additional metadata set. I also implemented these as custom fields but found the the result to be less satisfactory.
Some users who have trac accounts do not have phab accounts. Fortunately it is easy to create new user accounts for these users which have empty passwords which can be recovered by the appropriate email address. This means tickets can be properly attributed in the migration.
The ticket numbers are maintained. I still advocate moving the infrastructure tickets in order to maintain this mapping. Especially as there has been little activity in thr the last year.
Tickets are linked to the relevant commits, differentials and other tickets. There are 3000 dummy differentials which are used to test that the linking works correctly. Of course with real data, the proper differential would be linked.(http://ec2-52-213-249-242.eu-west-1.compute.amazonaws.com/T11044)
There are a couple of issues currently with the migration. There are a few issues in the parser which converts trac markup to remarkup. Most comments have very simple with just paragraphs and code blocks but complex items like lists are sometimes parsed incorrectly. Definition lists are converted to tables as there are no equivalent in remarkup. Trac ticket links are converted to phab ticket links.
The ideal time to migrate is before the end of January The busiest time for the issue tracker is before and after a new major release. With 8.2 planned for around April this gives the transition a few months to settle. We can close the trac issue tracker and continue to serve it or preferably redirect users to the new ticket. I don't plan to migrate the wiki at this stage as I do not feel that the parser is robust enough although there are now few other technical challenges blocking this direction.

Good comments Edward. I think the answers to all three of your points
will be insightful.
1. As for why it appears some information from the ticket is missing.
The version field is not very useful as there are only two active
branches at once. Instead we want a project which marks tickets which
apply to the 8.0.2 branch for example. Tickets which refer to ancient
versions of GHC should be closed if they can't be reproduced with
HEAD. It is also not used very often, only updated on about 600
tickets.
A tag for the architecture field is only added if the architecture is
set to something other than the default. The ticket you linked had the
default value and in fact, architecture was irrelevant to the ticket
as it was about the type checker so it could be argued including this
option is confusing to the reporter.
I'm also skeptical about how useful the component field is. I've never
personally used it and it is not accurate for the majority of tickets.
If someone disagrees then please say but it is really not used very
much.
Finally, the related tickets look slightly off.
This is a reoccurring problem with trac, there is no validation for
any of the text fields. The parser I wrote assumed that tickets
started with a # but in this example the first related ticket
initially was hashless. There are many examples like this which I have
come across. In this case I think I can relax it to search for any
contiguous set of numbers and recover the correct information.
The dump of the database which I had is about two months old which
explains why the most recent changes are not included.
Here is how often each field has been updated.
field | count
--------------+-------
_comment0 | 1839
_comment1 | 364
_comment10 | 1
_comment11 | 1
_comment12 | 1
_comment13 | 1
_comment14 | 1
_comment15 | 1
_comment16 | 1
_comment2 | 123
_comment3 | 53
_comment4 | 23
_comment5 | 13
_comment6 | 4
_comment7 | 4
_comment8 | 3
_comment9 | 1
architecture | 2025
blockedby | 1103
blocking | 1112
cc | 5358
comment | 75967
component | 1217
description | 1919
differential | 2410
difficulty | 4968
failure | 1427
keywords | 833
milestone | 13695
os | 1964
owner | 4870
patch | 26
priority | 2495
related | 1869
reporter | 7
resolution | 10446
severity | 83
status | 14612
summary | 827
testcase | 2386
type | 811
version | 687
wikipage | 873
2. This is a legitimate point. I will say in response that the
majority of triaging is done by those who regularly use the bug
tracker. These people will know the correct tags to use. There are
occasionally people who submit tickets and ask questions about what to
fill in these fields or fill them in incorrectly. Removing them for a
uniform system is advantageous in my opinion.
3. Here is how the search works. It is context sensitive, if you
search from the home page then you search everything. If you search
after clicking on "maniphest" to enter the maniphest application it
will only search tickets.
There is a similar advanced search for Maniphest -
http://ec2-52-214-147-146.eu-west-1.compute.amazonaws.com/maniphest/query/ad...
Using this you can sort by priority and then by ticket number. Here is
an example searching the tickets with the PatternSynonyms tag -
http://ec2-52-214-147-146.eu-west-1.compute.amazonaws.com/maniphest/query/Wj...
I agree with you about the default layout. I would also like a more
compact view but I feel this style is the prevailing modern web dev
trend.
Thanks for your comments.
Matt
On Tue, Jan 3, 2017 at 5:21 PM, Edward Z. Yang
Hi Matthew,
Thanks for doing the work for setting up this prototype, it definitely helps in making an informed decision about the switch.
Some comments:
1. In your original email, you stated that many of the custom fields were going to be replaced with Phabricator "projects" (their equivalent of tags). First, I noticed a little trouble where some fields were just completely lost. Compare:
http://ec2-52-214-147-146.eu-west-1.compute.amazonaws.com/T8095 https://ghc.haskell.org/trac/ghc/ticket/8095
AFAICT, we lost version the bug was found in, architecture, component. I hope we can keep these details in the real migration! Also related tickets doesn't seem to be working (see example above); migration problem?

On 1/3/17 6:32 PM, Matthew Pickering wrote:
The version field is not very useful as there are only two active branches at once. Instead we want a project which marks tickets which apply to the 8.0.2 branch for example. Tickets which refer to ancient versions of GHC should be closed if they can't be reproduced with HEAD. It is also not used very often, only updated on about 600 tickets. I strongly disagree here. It is not uncommon to have a user report a bug against an old version of GHC. When the reporter sets a version of, say, 7.6.3 these days, we know that the bug is quite clearly old and may already be fixed. I'm also skeptical about how useful the component field is. I've never personally used it and it is not accurate for the majority of tickets. If someone disagrees then please say but it is really not used very much. I use the Template Haskell component field to quickly search for all TH tickets. That said, the line between Component and Keyword is very murky and ought to be straightened out. I'm thus not against scrapping Component, but I wouldn't want data loss during the conversion: an updated Component field should be retained as a tag.
Richard

Excerpts from Matthew Pickering's message of 2017-01-03 23:32:42 +0000:
The version field is not very useful as there are only two active branches at once. Instead we want a project which marks tickets which apply to the 8.0.2 branch for example. Tickets which refer to ancient versions of GHC should be closed if they can't be reproduced with HEAD. It is also not used very often, only updated on about 600 tickets.
Echoing Richard's comment, it's a helpful reminder to the reporter to say what version of GHC the bug was on. If it's old, the first thing to do is check if it still fails in HEAD.
I'm also skeptical about how useful the component field is. I've never personally used it and it is not accurate for the majority of tickets. If someone disagrees then please say but it is really not used very much.
I think that there is a substantial subset of tickets that have a good "component" characterization. I have historically found "Runtime system", "Linker", "Build system", "Profiling" and a number of others very useful. Yes, a lot of tickets get dumped in "Compiler", but many have very good categorization!
2. This is a legitimate point. I will say in response that the majority of triaging is done by those who regularly use the bug tracker. These people will know the correct tags to use. There are occasionally people who submit tickets and ask questions about what to fill in these fields or fill them in incorrectly. Removing them for a uniform system is advantageous in my opinion.
I am a "regular user" of Cabal's GitHub bug tracker, and I find it difficult to remember to apply all of the tags that I'm "supposed" to for any given ticket. It got better when I reorged all the tags to give them a prefix for the "category" they were in, but I still have to scroll through the list that contains ALL THE TAGS when really I just want to select one per category. For example, priority in GH is a complete lost cause because none of the display mechanisms take priority into account. Another benefit of tags by category is in tabular views, you can ask to group things by category, or priority, etc. Tag based systems rarely have this kind of UI.
I agree with you about the default layout. I would also like a more compact view but I feel this style is the prevailing modern web dev trend.
Well, this is something we can fix with a little CSS :) Edward
Thanks for your comments.
Matt
On Tue, Jan 3, 2017 at 5:21 PM, Edward Z. Yang
wrote: Hi Matthew,
Thanks for doing the work for setting up this prototype, it definitely helps in making an informed decision about the switch.
Some comments:
1. In your original email, you stated that many of the custom fields were going to be replaced with Phabricator "projects" (their equivalent of tags). First, I noticed a little trouble where some fields were just completely lost. Compare:
http://ec2-52-214-147-146.eu-west-1.compute.amazonaws.com/T8095 https://ghc.haskell.org/trac/ghc/ticket/8095
AFAICT, we lost version the bug was found in, architecture, component. I hope we can keep these details in the real migration! Also related tickets doesn't seem to be working (see example above); migration problem?

I am persuaded that component is useful. Richard makes the point that
there is a murky divide between component and keywords. This is right
and it indicates that we should keep the component field but also
homogenise it was the keywords (in the form of projects).
I have included which fields are used frequently in the footer of this message.
The arguments for version are not convincing. The first thing you do
when working on a ticket anyway is to try and reproduce the bug with a
test case in HEAD. The date a ticket reported is as good an indicator
of version.
I also noted that I neglected to update the dateUpdated field for
tickets so queries by date last modified do not currently work and
some dates may appear strange when searching.
Edward: There is support for bucketing by project as well. See this
query for example,
http://ec2-52-214-147-146.eu-west-1.compute.amazonaws.com/maniphest/query/An...
In these discussions we should remember that phabricator is not trac.
I am not trying to exactly recreate the trac experience because
otherwise we might as well carry on using trac.
Matt
newvalue | count | data last used
-------------------------+-------+------------------
Core Libraries | 171 | 1467895032829170
Compiler (Type checker) | 162 | 1473084454218219
Runtime System | 128 | 1465462467207643
GHCi | 78 | 1469178319691539
Build System | 67 | 1466005572342115
libraries/base | 63 | 1434353266824396
Template Haskell | 60 | 1471813543330680
Compiler | 57 | 1454111515909737
Compiler (Parser) | 48 | 1469089960346131
libraries (other) | 43 | 1426680041417003
Documentation | 34 | 1469109265405752
Runtime System (Linker) | 31 | 1465457535216398
Profiling | 27 | 1464370392337006
Compiler (NCG) | 24 | 1464454221111344
Driver | 23 | 1464988993920936
Compiler (Linking) | 20 | 1453415934718049
Package system | 19 | 1445379269305504
Test Suite | 19 | 1466101320438273
libraries/process | 17 | 1380279285602376
Compiler (LLVM) | 17 | 1453643706521552
Trac & Git | 13 | 1417192612294646
Compiler (CodeGen) | 12 | 1466888486602141
Code Coverage | 9 | 1463929919796252
Compiler (FFI) | 9 | 1438109440242842
libraries/unix | 8 | 1393611940333801
Data Parallel Haskell | 8 | 1427089471985001
None | 8 | 1457637409612864
hsc2hs | 5 | 1433929228414856
libraries/network | 5 | 1225140383000000
libraries/random | 4 | 1404824781090514
libraries/directory | 4 | 1355926496000000
External Core | 4 | 1365855698000000
libraries/pretty | 4 | 1321743759000000
ghc-pkg | 4 | 1447954686599857
GHC API | 3 | 1463577929270933
libraries/HGL | 3 | 1214961444000000
Prelude | 2 | 1313617037000000
libraries/haskell98 | 1 | 1186695581000000
libraries (old-time) | 1 | 1215426256000000
Visual Haskell | 1 | 1166430307000000
NoFib benchmark suite | 1 | 1405260335339305
On Wed, Jan 4, 2017 at 4:34 AM, Edward Z. Yang
Excerpts from Matthew Pickering's message of 2017-01-03 23:32:42 +0000:
The version field is not very useful as there are only two active branches at once. Instead we want a project which marks tickets which apply to the 8.0.2 branch for example. Tickets which refer to ancient versions of GHC should be closed if they can't be reproduced with HEAD. It is also not used very often, only updated on about 600 tickets.
Echoing Richard's comment, it's a helpful reminder to the reporter to say what version of GHC the bug was on. If it's old, the first thing to do is check if it still fails in HEAD.
I'm also skeptical about how useful the component field is. I've never personally used it and it is not accurate for the majority of tickets. If someone disagrees then please say but it is really not used very much.
I think that there is a substantial subset of tickets that have a good "component" characterization. I have historically found "Runtime system", "Linker", "Build system", "Profiling" and a number of others very useful. Yes, a lot of tickets get dumped in "Compiler", but many have very good categorization!
2. This is a legitimate point. I will say in response that the majority of triaging is done by those who regularly use the bug tracker. These people will know the correct tags to use. There are occasionally people who submit tickets and ask questions about what to fill in these fields or fill them in incorrectly. Removing them for a uniform system is advantageous in my opinion.
I am a "regular user" of Cabal's GitHub bug tracker, and I find it difficult to remember to apply all of the tags that I'm "supposed" to for any given ticket. It got better when I reorged all the tags to give them a prefix for the "category" they were in, but I still have to scroll through the list that contains ALL THE TAGS when really I just want to select one per category. For example, priority in GH is a complete lost cause because none of the display mechanisms take priority into account.
Another benefit of tags by category is in tabular views, you can ask to group things by category, or priority, etc. Tag based systems rarely have this kind of UI.
I agree with you about the default layout. I would also like a more compact view but I feel this style is the prevailing modern web dev trend.
Well, this is something we can fix with a little CSS :)
Edward
Thanks for your comments.
Matt
On Tue, Jan 3, 2017 at 5:21 PM, Edward Z. Yang
wrote: Hi Matthew,
Thanks for doing the work for setting up this prototype, it definitely helps in making an informed decision about the switch.
Some comments:
1. In your original email, you stated that many of the custom fields were going to be replaced with Phabricator "projects" (their equivalent of tags). First, I noticed a little trouble where some fields were just completely lost. Compare:
http://ec2-52-214-147-146.eu-west-1.compute.amazonaws.com/T8095 https://ghc.haskell.org/trac/ghc/ticket/8095
AFAICT, we lost version the bug was found in, architecture, component. I hope we can keep these details in the real migration! Also related tickets doesn't seem to be working (see example above); migration problem?

I should have looked more closely at the implementation.. the
component field was already preserved. There is a bug where it is not
set properly if it was set by the ticket reporter. I will look into
this problem this evening!
Matt
On Wed, Jan 4, 2017 at 10:18 AM, Matthew Pickering
I am persuaded that component is useful. Richard makes the point that there is a murky divide between component and keywords. This is right and it indicates that we should keep the component field but also homogenise it was the keywords (in the form of projects).
I have included which fields are used frequently in the footer of this message.
The arguments for version are not convincing. The first thing you do when working on a ticket anyway is to try and reproduce the bug with a test case in HEAD. The date a ticket reported is as good an indicator of version.
I also noted that I neglected to update the dateUpdated field for tickets so queries by date last modified do not currently work and some dates may appear strange when searching.
Edward: There is support for bucketing by project as well. See this query for example, http://ec2-52-214-147-146.eu-west-1.compute.amazonaws.com/maniphest/query/An...
In these discussions we should remember that phabricator is not trac. I am not trying to exactly recreate the trac experience because otherwise we might as well carry on using trac.
Matt
newvalue | count | data last used
-------------------------+-------+------------------ Core Libraries | 171 | 1467895032829170 Compiler (Type checker) | 162 | 1473084454218219 Runtime System | 128 | 1465462467207643 GHCi | 78 | 1469178319691539 Build System | 67 | 1466005572342115 libraries/base | 63 | 1434353266824396 Template Haskell | 60 | 1471813543330680 Compiler | 57 | 1454111515909737 Compiler (Parser) | 48 | 1469089960346131 libraries (other) | 43 | 1426680041417003 Documentation | 34 | 1469109265405752 Runtime System (Linker) | 31 | 1465457535216398 Profiling | 27 | 1464370392337006 Compiler (NCG) | 24 | 1464454221111344 Driver | 23 | 1464988993920936 Compiler (Linking) | 20 | 1453415934718049 Package system | 19 | 1445379269305504 Test Suite | 19 | 1466101320438273 libraries/process | 17 | 1380279285602376 Compiler (LLVM) | 17 | 1453643706521552 Trac & Git | 13 | 1417192612294646 Compiler (CodeGen) | 12 | 1466888486602141 Code Coverage | 9 | 1463929919796252 Compiler (FFI) | 9 | 1438109440242842 libraries/unix | 8 | 1393611940333801 Data Parallel Haskell | 8 | 1427089471985001 None | 8 | 1457637409612864 hsc2hs | 5 | 1433929228414856 libraries/network | 5 | 1225140383000000 libraries/random | 4 | 1404824781090514 libraries/directory | 4 | 1355926496000000 External Core | 4 | 1365855698000000 libraries/pretty | 4 | 1321743759000000 ghc-pkg | 4 | 1447954686599857 GHC API | 3 | 1463577929270933 libraries/HGL | 3 | 1214961444000000 Prelude | 2 | 1313617037000000 libraries/haskell98 | 1 | 1186695581000000 libraries (old-time) | 1 | 1215426256000000 Visual Haskell | 1 | 1166430307000000 NoFib benchmark suite | 1 | 1405260335339305
On Wed, Jan 4, 2017 at 4:34 AM, Edward Z. Yang
wrote: Excerpts from Matthew Pickering's message of 2017-01-03 23:32:42 +0000:
The version field is not very useful as there are only two active branches at once. Instead we want a project which marks tickets which apply to the 8.0.2 branch for example. Tickets which refer to ancient versions of GHC should be closed if they can't be reproduced with HEAD. It is also not used very often, only updated on about 600 tickets.
Echoing Richard's comment, it's a helpful reminder to the reporter to say what version of GHC the bug was on. If it's old, the first thing to do is check if it still fails in HEAD.
I'm also skeptical about how useful the component field is. I've never personally used it and it is not accurate for the majority of tickets. If someone disagrees then please say but it is really not used very much.
I think that there is a substantial subset of tickets that have a good "component" characterization. I have historically found "Runtime system", "Linker", "Build system", "Profiling" and a number of others very useful. Yes, a lot of tickets get dumped in "Compiler", but many have very good categorization!
2. This is a legitimate point. I will say in response that the majority of triaging is done by those who regularly use the bug tracker. These people will know the correct tags to use. There are occasionally people who submit tickets and ask questions about what to fill in these fields or fill them in incorrectly. Removing them for a uniform system is advantageous in my opinion.
I am a "regular user" of Cabal's GitHub bug tracker, and I find it difficult to remember to apply all of the tags that I'm "supposed" to for any given ticket. It got better when I reorged all the tags to give them a prefix for the "category" they were in, but I still have to scroll through the list that contains ALL THE TAGS when really I just want to select one per category. For example, priority in GH is a complete lost cause because none of the display mechanisms take priority into account.
Another benefit of tags by category is in tabular views, you can ask to group things by category, or priority, etc. Tag based systems rarely have this kind of UI.
I agree with you about the default layout. I would also like a more compact view but I feel this style is the prevailing modern web dev trend.
Well, this is something we can fix with a little CSS :)
Edward
Thanks for your comments.
Matt
On Tue, Jan 3, 2017 at 5:21 PM, Edward Z. Yang
wrote: Hi Matthew,
Thanks for doing the work for setting up this prototype, it definitely helps in making an informed decision about the switch.
Some comments:
1. In your original email, you stated that many of the custom fields were going to be replaced with Phabricator "projects" (their equivalent of tags). First, I noticed a little trouble where some fields were just completely lost. Compare:
http://ec2-52-214-147-146.eu-west-1.compute.amazonaws.com/T8095 https://ghc.haskell.org/trac/ghc/ticket/8095
AFAICT, we lost version the bug was found in, architecture, component. I hope we can keep these details in the real migration! Also related tickets doesn't seem to be working (see example above); migration problem?

On Jan 4, 2017, at 5:18 AM, Matthew Pickering
wrote: I am persuaded that component is useful. Richard makes the point that there is a murky divide between component and keywords. This is right and it indicates that we should keep the component field but also homogenise it was the keywords (in the form of projects).
This seems sensible, yes.
The arguments for version are not convincing. The first thing you do when working on a ticket anyway is to try and reproduce the bug with a test case in HEAD. The date a ticket reported is as good an indicator of version.
I still strongly disagree with you here. You've described the first thing *you* do when working on a ticket, but that's not the first thing *I* do. My first step is to decide whether or not a care about a ticket, roughly like this: - Read ticket title. If it's not about my area, stop. - If the ticket is obviously a bug (panic, core lint error): * Check the version reported. If the version is old and I'm squeezed for time at the moment, stop. * Try to reproduce at the version reported. If I can't, report this on the ticket. * If HEAD is around on my machine and I'm sufficiently interested, try to repro on HEAD. Report my findings. - If the ticket is not obviously a bug (complicated type-level shenanigans that is either accepted or rejected): * Think Hard about whether behavior is expected or not and report accordingly. * If behavior is indeed a bug, continue with the steps outlined above. Note that version numbers play a key role in the triage process! If we had a bot that could try to repro every reported bug on HEAD and could report its findings, I would find the need for a version number less pressing. But until then, it's very very helpful.
I also noted that I neglected to update the dateUpdated field for tickets so queries by date last modified do not currently work and some dates may appear strange when searching.
Edward: There is support for bucketing by project as well. See this query for example, http://ec2-52-214-147-146.eu-west-1.compute.amazonaws.com/maniphest/query/An...
In these discussions we should remember that phabricator is not trac. I am not trying to exactly recreate the trac experience because otherwise we might as well carry on using trac.
Indeed. And I think using a tag list instead of the current keywords/component interface would be an improvement. At the same time, we need to identify workflows that go well with Trac but which might be disrupted in the changeover. I'm not arguing that any disrupted workflows are a deal-breaker, but we need to know what they are. Richard

In response to no# 2, I was looking at this my self since I think separate
fields would definitely be useful. It seems you can customize the form
design on phabricrator.
I think it would definitely be worth it to make a new form layout
resembling the layout of track. I don't know how it stores it but
presumably this would also improve the searching allowing you to filter on
specific fields instead of just tags.
Have you looked into this already Matt?
On Tue, 3 Jan 2017, 23:33 Matthew Pickering,
Good comments Edward. I think the answers to all three of your points will be insightful.
1. As for why it appears some information from the ticket is missing.
The version field is not very useful as there are only two active branches at once. Instead we want a project which marks tickets which apply to the 8.0.2 branch for example. Tickets which refer to ancient versions of GHC should be closed if they can't be reproduced with HEAD. It is also not used very often, only updated on about 600 tickets.
A tag for the architecture field is only added if the architecture is set to something other than the default. The ticket you linked had the default value and in fact, architecture was irrelevant to the ticket as it was about the type checker so it could be argued including this option is confusing to the reporter.
I'm also skeptical about how useful the component field is. I've never personally used it and it is not accurate for the majority of tickets. If someone disagrees then please say but it is really not used very much.
Finally, the related tickets look slightly off. This is a reoccurring problem with trac, there is no validation for any of the text fields. The parser I wrote assumed that tickets started with a # but in this example the first related ticket initially was hashless. There are many examples like this which I have come across. In this case I think I can relax it to search for any contiguous set of numbers and recover the correct information.
The dump of the database which I had is about two months old which explains why the most recent changes are not included.
Here is how often each field has been updated.
field | count --------------+------- _comment0 | 1839 _comment1 | 364 _comment10 | 1 _comment11 | 1 _comment12 | 1 _comment13 | 1 _comment14 | 1 _comment15 | 1 _comment16 | 1 _comment2 | 123 _comment3 | 53 _comment4 | 23 _comment5 | 13 _comment6 | 4 _comment7 | 4 _comment8 | 3 _comment9 | 1 architecture | 2025 blockedby | 1103 blocking | 1112 cc | 5358 comment | 75967 component | 1217 description | 1919 differential | 2410 difficulty | 4968 failure | 1427 keywords | 833 milestone | 13695 os | 1964 owner | 4870 patch | 26 priority | 2495 related | 1869 reporter | 7 resolution | 10446 severity | 83 status | 14612 summary | 827 testcase | 2386 type | 811 version | 687 wikipage | 873
2. This is a legitimate point. I will say in response that the majority of triaging is done by those who regularly use the bug tracker. These people will know the correct tags to use. There are occasionally people who submit tickets and ask questions about what to fill in these fields or fill them in incorrectly. Removing them for a uniform system is advantageous in my opinion.
3. Here is how the search works. It is context sensitive, if you search from the home page then you search everything. If you search after clicking on "maniphest" to enter the maniphest application it will only search tickets.
There is a similar advanced search for Maniphest -
http://ec2-52-214-147-146.eu-west-1.compute.amazonaws.com/maniphest/query/ad... Using this you can sort by priority and then by ticket number. Here is an example searching the tickets with the PatternSynonyms tag -
http://ec2-52-214-147-146.eu-west-1.compute.amazonaws.com/maniphest/query/Wj...
I agree with you about the default layout. I would also like a more compact view but I feel this style is the prevailing modern web dev trend.
Thanks for your comments.
Matt
On Tue, Jan 3, 2017 at 5:21 PM, Edward Z. Yang
wrote: Hi Matthew,
Thanks for doing the work for setting up this prototype, it definitely helps in making an informed decision about the switch.
Some comments:
1. In your original email, you stated that many of the custom fields were going to be replaced with Phabricator "projects" (their equivalent of tags). First, I noticed a little trouble where some fields were just completely lost. Compare:
http://ec2-52-214-147-146.eu-west-1.compute.amazonaws.com/T8095 https://ghc.haskell.org/trac/ghc/ticket/8095
AFAICT, we lost version the bug was found in, architecture, component. I hope we can keep these details in the real migration! Also related tickets doesn't seem to be working (see example above); migration problem?
ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Matthew Pickering
Dear devs,
Hi Matthew and Dan, First, thanks for your work on this; it is an impressive effort. Reconstructing a decade of tickets with broken markup, tricky syntax, and a strange data model is no easy task. Good work so far! On the whole I am pleasantly surprised by how nicely Maniphest seems to hang together. I have pasted my notes from my own reflection on the pros and cons of both systems below. On re-reading them, it seems clear that Trac does leave us with a number of issues which Phabricator may resolve. As I've expressed in the past, I think we should consider preservation of ticket numbers to be an absolute requirement of any migration. To do otherwise imposes a small cost on a large number of people for a very long time with little benefit. GHC infrastructure exists to support GHC, not the other way around. However, ticket numbers notwithstanding I think I would be fine moving in this direction if the community agrees that this is the direction we want to go in. There are a few questions that remain outstanding, however: What do others think of this? ============================= Does Phabricator address the concerns that others, including those outside of the usual GHC development community, have raised about our issue tracking in the past? It would be interesting to hear some outside voices. How do we handle the stable branch? =================================== One important role that the issue tracker plays is ensuring that patches are backported to the stable branch when appropriate. In Trac we handle this with a "merge" state (indicating that the ticket has been fixed in `master`, but the fix needs to be backported) and the milestone field (to indicate which release we want to backport to). A significant amount of GHC's maintenance load is spent backporting and updating tickets, so it's important that this process works smoothly and reliably. I think this is may be an area where Phabricator could improve the status quo since the workflow currently looks something like this, 1. Someone merges a patch to `master` fixing an issue; if the commit message mentions the ticket number then our infrastructure automatically leaves a comment referencing the commit on the ticket. 2. Someone (usually the committer) places the ticket in `merge` state and sets the milestone appropriately 3. I merge the patch to the stable branch 4. I close the ticket and manually leave a comment mentioning the SHA of the backported commit. In particular (4) is more work than it needs to be; ideally comment generation would be automated as it is for commits to `master` but Trac's comment-on-commit functionality is a bit limited, so this is currently not an option. I'm not sure what Phabricator's analogous workflow to the above might look like. It seems that Phabricator's Releeph module may be in part intended for this use-case, but it seems to have some unfortunate limitations (e.g. the inflexibility in branch naming) that make it hard to imagine it being usable in our case. Setting aside Releeph, perhaps the best solution would be to continue with our current workflow: we would retain the "status" state and milestone projects would take the place of the current "milestone" field. If I'm not mistaken Phabricator can be configured to mention commits on stable branches in the ticket history, so this should help point (4). Which fields should be preserved? ================================= Our Trac instance associates a lot of structured metadata with each ticket. I generally think that this is a good thing, especially compared to the everything-is-a-tag model which I have found can quickly become unmaintainable. Unfortunately, Trac makes our users pay for these fields with a confusing ticket form. It appears that Phabricator's Transactions [1] module may allow us to have our cake and eat it too: we can define one form for users to create tickets and another, more complete form for developer use. In light of this I don't see why we would need to fall back to the everything-is-a-tag. Matthew, what did you feel was less-than-satisfactory about the proper-fields approach? I fear that relevant metadata like GHC version, operating system and architecture simply won't be provided unless the user is explicitly prompted; I personally find the cue to be quite helpful. Presumably contributors can set Herald rules for notification on these fields if they so desire. In the particular case of the "Component" field, I personally try to set this correctly when possible and have certainly found it useful as a search criterion. However, I suspect it would be fine as a tag. I also know that Simon PJ is quite fond of the test case field (although few others as as diligent in keeping this one up to date). How would we migrate and what will become of Trac? ================================================== The mechanics of migration will take time and effort to work out. If we decide this is the right direction I think we should be cautious in setting timelines; we should take as much time as we need to do it correctly. Regardless, we should gather a consensus on the general direction before we start hashing this out. Thanks again for your effort on this, Matthew and Dan, and sorry it took me so long to finally get these notes out. Cheers, - Ben [1] https://secure.phabricator.com/book/phabricator/article/forms/ Notes ===== These were largely for my sake to keep track of the pros and cons of the two options. I've nevertheless included them here for completeness. What does Maniphest do well? ---------------------------- * Actively developed: Phabricator will continue to improve in the future. * Metadata: Custom fields are supported. * Flexible user interface: Custom fields can be hidden from the new ticket form to prevent user confusion. * Familiarity: Many users may feel more at home in Phabricator's interface; reMarkup's similarity to Markdown also helps. * Integration: Having Phabricator handle code review, release management, and issue tracking will hopefully reduce maintenance workload. * Notifications: Herald's rule-based notifications are quite handy. What does Maniphest do poorly? ------------------------------ * Flexibility of search: The search options feel a bit more limiting than Trac; in particular the ability to show arbitrary columns in search results seems conspicuously missing. * Legibility: This is admittedly to some extent a matter of aesthetics but the search results list feels very busy and is quite difficult to quickly scan. This is made exacerbated by the fact that some aspects of the the color scheme are quite low contrast (e.g. grey against white for closed tickets). This hurts quite a bit since a number of contributors spend a significant amount of time looking through lists of tickets. Perhaps we could convince the Phacility people to provide a more legible, compact presentation option. What does Trac do well? ----------------------- * Convenient cross-referencing: while the syntax is a bit odd, once you acclimate it is quite liberating to be able to precisely cross-reference tickets, wiki documents, and comments without copying links around. * Automation of ticket lifecycle: Trac tickets progress through their lifecycle (e.g. from "new" to "patch" to "merge" to "closed" statuses) through predefined actions. This means that moving a ticket through its lifecycle typically only requires one click and the right thing happens with no additional effort. I think this is a great model, although in practice it's not clear how much we benefit from it compared to a typical Maniphest workflow. * Rich metadata: Tickets can have a variety of metadata fields which can be queried in sophisticated ways . What does Trac do poorly? ------------------------- * Familiarity: Many users feel rather lost in Trac * Active development: Trac is largely a stagnant project. * Spam management: Keeping spam at bay has been a challenge. We seem to have it under control at the moment, but I wonder how long this will last for. * Safety: I have personally lost probably a half-dozen hours of my life to Trac eating comments. * Integration with code review workflow: We use Phabricator for CI and code review; the only thing that remains on Trac are our tickets and the Wiki. Keeping these two resources in sync is time-consuming and error-prone. * Full text search: Trac's full text search capabilities are generally terrible. While I've tried working around this using PostgreSQL's native full text search functionality, the result is poorly integrated into Trac and consequently hard to use. * Customizability of the ticket form: While the rich metadata that Trac supports can be very helpful developers, it can also be confusing to users. Ideally we would hide these fields but Trac does not give us the ability to do so. * Relations between tickets: Trac has essentially no first-class notion of ticket relatedness. Even duplicate tickets need to be manually annotated in both directions. * Keywords are hard to discover and apply * Fine-grained notification support is nearly non-existent

On Jan 8, 2017, at 12:40 AM, Ben Gamari
wrote: * Metadata: Custom fields are supported.
In agreement with your comments above, I'm glad to see this. Trac's metadata currently is suboptimal, but I don't think this means we should throw out the ability to have structured metadata in its entirety.
* Flexible user interface: Custom fields can be hidden from the new ticket form to prevent user confusion.
Yay.
* Familiarity: Many users may feel more at home in Phabricator's interface; reMarkup's similarity to Markdown also helps.
Nitpick: Do we have any control over this? (I doubt it.) I find switching between GitHub Markdown, RST, and reMarkup to be a low-grade but constant annoyance.
* Legibility:
I seem to recall that Phab originally used gray-on-white in Diffs, but we were able to fix with some CSS. (Or did it require upstream intervention?) Perhaps we can do something similar here. I find the modern trend to use lower-contrast interfaces utterly maddening.
What does Trac do well? -----------------------
* Convenient cross-referencing: while the syntax is a bit odd, once you acclimate it is quite liberating to be able to precisely cross-reference tickets, wiki documents, and comments without copying links around.
Yesyesyes.
* Automation of ticket lifecycle: Trac tickets progress through their lifecycle (e.g. from "new" to "patch" to "merge" to "closed" statuses) through predefined actions. This means that moving a ticket through its lifecycle typically only requires one click and the right thing happens with no additional effort. I think this is a great model, although in practice it's not clear how much we benefit from it compared to a typical Maniphest workflow.
I'm less convinced about this benefit of Trac. For instance, if I close a ticket in error, I lose ownership. Then I have to reopen but cannot set an owner at the same time. Maybe it's just a configuration issue, but I imagine we have experienced devs doing ticket-state management and don't need strict controls here.
What does Trac do poorly? -------------------------
* Active development: Trac is largely a stagnant project.
I was unaware of this. This is a significant downside in my opinion.
* Safety: I have personally lost probably a half-dozen hours of my life to Trac eating comments.
That's odd. I have not had this experience.
* Relations between tickets: Trac has essentially no first-class notion of ticket relatedness. Even duplicate tickets need to be manually annotated in both directions.
Yes. Frustrating.
* Keywords are hard to discover and apply
Yes. With discoverable keywords, we might be able to get more reporter buy-in. One more issue that we should consider: email notification. Perhaps I'm stodgy, but I'm a big fan of email. Trac emails notifications are not quite ideal (I wish the new content came above the metadata), but they're very functional. How does Phab compare? Can we see a sample notification it might create? Thanks! Richard

To first reply to the one specific reoccurring point about custom fields.
The problem with 'os' and 'architecture' is a philosophical one, in
what way are they any different to any other metadata for a ticket? I
am of the opinion that we should only include information when it is
relevant, a lot of the time these two fields are not.
Including the fields as a special case is in fact worse as users feel
obliged to complete them even when they are irrelevant. Users who are
interested in these platforms are interested in problems which are
specific.
These fields have been structured for over 10 years now, some options
have been barely used but still clutter all interfaces. Nearly 2000
tickets are tagged as relevant to `x86` which massively dwarfs the
other fields -- there is an assumption that unless otherwise stated
the problem is manifested on x86 as that is the default use case.
What's more, just by browsing tickets categorised with this meta data,
it is often evident from the title that the problem is on a
non-default operating system. The assumption in this case is some
debian derivation, users reporting issues on other operating systems
include the operating system prominently as they know it is not
standard. (For example -
https://ghc.haskell.org/trac/ghc/query?os=MacOS+X&order=priority)
Stats for architecture - https://phabricator.haskell.org/P133
Stats for operating system - https://phabricator.haskell.org/P134
I modified my local install of phab to add custom fields,
http://ec2-52-214-147-146.eu-west-1.compute.amazonaws.com/M1/7/
The results were better than I remembered but I am unsatisfied that
they behave differently to projects and clutter up the description of
each ticket when they are "unset".
On the other hand, I think custom fields are suitable for things like
test case, wikipage etc. It is easy to add a field to carry over the
test case but I always found it a bit redundant as by looking at the
commit information you could work out which test is relevant to which
commit.
So to summarise I think..
Component -> Projects
OS -> (Sub)Projects
Arch -> (Sub)Projects
Keywords -> Projects
Version -> Remove (It is a proxy for date reported)
Milestone -> Project (Milestone)
Matt
On Sun, Jan 8, 2017 at 2:32 PM, Richard Eisenberg
On Jan 8, 2017, at 12:40 AM, Ben Gamari
wrote: * Metadata: Custom fields are supported.
In agreement with your comments above, I'm glad to see this. Trac's metadata currently is suboptimal, but I don't think this means we should throw out the ability to have structured metadata in its entirety.
* Flexible user interface: Custom fields can be hidden from the new ticket form to prevent user confusion.
Yay.
* Familiarity: Many users may feel more at home in Phabricator's interface; reMarkup's similarity to Markdown also helps.
Nitpick: Do we have any control over this? (I doubt it.) I find switching between GitHub Markdown, RST, and reMarkup to be a low-grade but constant annoyance.
* Legibility:
I seem to recall that Phab originally used gray-on-white in Diffs, but we were able to fix with some CSS. (Or did it require upstream intervention?) Perhaps we can do something similar here. I find the modern trend to use lower-contrast interfaces utterly maddening.
What does Trac do well? -----------------------
* Convenient cross-referencing: while the syntax is a bit odd, once you acclimate it is quite liberating to be able to precisely cross-reference tickets, wiki documents, and comments without copying links around.
Yesyesyes.
* Automation of ticket lifecycle: Trac tickets progress through their lifecycle (e.g. from "new" to "patch" to "merge" to "closed" statuses) through predefined actions. This means that moving a ticket through its lifecycle typically only requires one click and the right thing happens with no additional effort. I think this is a great model, although in practice it's not clear how much we benefit from it compared to a typical Maniphest workflow.
I'm less convinced about this benefit of Trac. For instance, if I close a ticket in error, I lose ownership. Then I have to reopen but cannot set an owner at the same time. Maybe it's just a configuration issue, but I imagine we have experienced devs doing ticket-state management and don't need strict controls here.
What does Trac do poorly? -------------------------
* Active development: Trac is largely a stagnant project.
I was unaware of this. This is a significant downside in my opinion.
* Safety: I have personally lost probably a half-dozen hours of my life to Trac eating comments.
That's odd. I have not had this experience.
* Relations between tickets: Trac has essentially no first-class notion of ticket relatedness. Even duplicate tickets need to be manually annotated in both directions.
Yes. Frustrating.
* Keywords are hard to discover and apply
Yes. With discoverable keywords, we might be able to get more reporter buy-in.
One more issue that we should consider: email notification. Perhaps I'm stodgy, but I'm a big fan of email. Trac emails notifications are not quite ideal (I wish the new content came above the metadata), but they're very functional. How does Phab compare? Can we see a sample notification it might create?
Thanks! Richard

On Jan 9, 2017, at 6:41 AM, Matthew Pickering
wrote: Component -> Projects OS -> (Sub)Projects Arch -> (Sub)Projects
What is a (Sub)Project? I've been operating under the assumption that a Project is just a tag. Do these tags have structure? My best guess from your discussion is that when you choose on Project, you are then forced to choose one of a set of others. That seems like a good plan.
Keywords -> Projects Version -> Remove (It is a proxy for date reported)
No no no no. I don't think either of us will convince the other on this point, but we should be clear that we need input from others to decide on this one.
Milestone -> Project (Milestone)
What does this mean? What is "Project (Milestone)"?
I have some example emails. https://phabricator.haskell.org/M2
Looks good. Thanks for posting this! Richard

Subprojects and Milestones are both special kinds of projects.
Subprojects are like projects but are associated with a parent
project. Unfortunately this doesn't really show up anywhere on the UI.
There is quite a long discussion about this on the upstream issue
tracker - https://secure.phabricator.com/T10349
Milestones are projects which are meant for tracking releases. A
project can only have one milestone at a time and importantly the
parent project is shown on the UI with milestones.
I took some screenshots to show how they show up in UI.
https://phabricator.haskell.org/M3
If you're interested about projects then the best place to read is
https://secure.phabricator.com/book/phabricator/article/projects/
They are not very mature and I expect their usage will be refined in
the next iteration. The UI for selecting projects could certainly be
improved rather than presenting a list of amorphous labels.
Matt
On Mon, Jan 9, 2017 at 6:41 PM, Richard Eisenberg
On Jan 9, 2017, at 6:41 AM, Matthew Pickering
wrote: Component -> Projects OS -> (Sub)Projects Arch -> (Sub)Projects
What is a (Sub)Project? I've been operating under the assumption that a Project is just a tag. Do these tags have structure? My best guess from your discussion is that when you choose on Project, you are then forced to choose one of a set of others. That seems like a good plan.
Keywords -> Projects Version -> Remove (It is a proxy for date reported)
No no no no. I don't think either of us will convince the other on this point, but we should be clear that we need input from others to decide on this one.
Milestone -> Project (Milestone)
What does this mean? What is "Project (Milestone)"?
I have some example emails. https://phabricator.haskell.org/M2
Looks good. Thanks for posting this!
Richard

On this Phab question, does Phab have an equivalent to Trac's wiki? That's quite important.
Simon
| -----Original Message-----
| From: ghc-devs [mailto:ghc-devs-bounces@haskell.org] On Behalf Of Matthew
| Pickering
| Sent: 10 January 2017 11:59
| To: Richard Eisenberg

There is an equivalent, it is called Phriction -
https://phabricator.haskell.org/w/
I am not proposing at this stage that we migrate the wiki contents as
well. That would certainly be a logical next step but I think trac's
wiki is quite a bit better.
Matt
On Tue, Jan 10, 2017 at 12:00 PM, Simon Peyton Jones
On this Phab question, does Phab have an equivalent to Trac's wiki? That's quite important.
Simon
| -----Original Message----- | From: ghc-devs [mailto:ghc-devs-bounces@haskell.org] On Behalf Of Matthew | Pickering | Sent: 10 January 2017 11:59 | To: Richard Eisenberg
| Cc: GHC developers | Subject: Re: Trac to Phabricator (Maniphest) migration prototype | | Subprojects and Milestones are both special kinds of projects. | | Subprojects are like projects but are associated with a parent project. | Unfortunately this doesn't really show up anywhere on the UI. | There is quite a long discussion about this on the upstream issue tracker - | https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fsecure.phab | ricator.com%2FT10349&data=02%7C01%7Csimonpj%40microsoft.com%7Cfe21d0babfb843 | 78ec2a08d439502937%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636196463840 | 067524&sdata=7KEVArFhp3bIBclu2Drh8hSn8d47Q1aXrhGRQVKp%2BwM%3D&reserved=0 | | Milestones are projects which are meant for tracking releases. A project can | only have one milestone at a time and importantly the parent project is | shown on the UI with milestones. | | I took some screenshots to show how they show up in UI. | | https://phabricator.haskell.org/M3 | | If you're interested about projects then the best place to read is | https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fsecure.phab | ricator.com%2Fbook%2Fphabricator%2Farticle%2Fprojects%2F&data=02%7C01%7Csimo | npj%40microsoft.com%7Cfe21d0babfb84378ec2a08d439502937%7C72f988bf86f141af91a | b2d7cd011db47%7C1%7C0%7C636196463840067524&sdata=MfqbX%2BCzMtqf4wIRhe0MUqSN4 | l8l7oRiDO3IUIqb8ag%3D&reserved=0 | | They are not very mature and I expect their usage will be refined in the | next iteration. The UI for selecting projects could certainly be improved | rather than presenting a list of amorphous labels. | | Matt | | On Mon, Jan 9, 2017 at 6:41 PM, Richard Eisenberg | wrote: | > | >> On Jan 9, 2017, at 6:41 AM, Matthew Pickering | wrote: | >> | >> Component -> Projects | >> OS -> (Sub)Projects | >> Arch -> (Sub)Projects | > | > What is a (Sub)Project? I've been operating under the assumption that a | Project is just a tag. Do these tags have structure? My best guess from your | discussion is that when you choose on Project, you are then forced to choose | one of a set of others. That seems like a good plan. | > | >> Keywords -> Projects | >> Version -> Remove (It is a proxy for date reported) | > | > No no no no. I don't think either of us will convince the other on this | point, but we should be clear that we need input from others to decide on | this one. | > | >> Milestone -> Project (Milestone) | > | > What does this mean? What is "Project (Milestone)"? | > | >> I have some example emails. https://phabricator.haskell.org/M2 | > | > Looks good. Thanks for posting this! | > | > Richard | _______________________________________________ | ghc-devs mailing list | ghc-devs@haskell.org | https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.haskell | .org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc- | devs&data=02%7C01%7Csimonpj%40microsoft.com%7Cfe21d0babfb84378ec2a08d4395029 | 37%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636196463840067524&sdata=mRz | Phhzd1Xjqfbwz%2BTtfESWg4gbdSWx5gC2HpDUtSuM%3D&reserved=0

With regards to the other two points that Ben made.
I solicited the opinion of a few people when I first made the
prototype and the reaction was that it didn't matter to them. We
should really make this decision based on the opinions of people who
are high utilisers of the tracker. The experience should be better for
occasional contributors as there are many more options for
authentication and clearer control over notifications.
The interaction with the stable branch was something I had not
considered yet so thank you for bringing this up. I spent yesterday
looking at the situation and it doesn't look like there is anything
immediate which could help with release management. People in
#phabricator told me that we shouldn't use Releeph as there were plans
to change it significantly and it wasn't a finished product. They
pointed me to https://secure.phabricator.com/T9530 and
https://secure.phabricator.com/D16981 which describe the future of the
feature. In particular, the "Facebook-Style Cherry-Picks /
Phabricator-Style Stable / Backporting" work flow looks close to
current practices. This being said, it isn't clear at all when they
plan to introduce these features.
Custom forms are also a good idea. We could even modify the URLs
sometimes produced by the compiler for panics to prefill certain
fields of the form.
(For example.. http://ec2-52-214-147-146.eu-west-1.compute.amazonaws.com/maniphest/task/edit/?projects=Inlining&title=Simplified%20Ticks%20Exhausted)
Matt
On Sun, Jan 8, 2017 at 5:40 AM, Ben Gamari
Matthew Pickering
writes: Dear devs,
Hi Matthew and Dan,
First, thanks for your work on this; it is an impressive effort. Reconstructing a decade of tickets with broken markup, tricky syntax, and a strange data model is no easy task. Good work so far!
On the whole I am pleasantly surprised by how nicely Maniphest seems to hang together. I have pasted my notes from my own reflection on the pros and cons of both systems below. On re-reading them, it seems clear that Trac does leave us with a number of issues which Phabricator may resolve.
As I've expressed in the past, I think we should consider preservation of ticket numbers to be an absolute requirement of any migration. To do otherwise imposes a small cost on a large number of people for a very long time with little benefit. GHC infrastructure exists to support GHC, not the other way around.
However, ticket numbers notwithstanding I think I would be fine moving in this direction if the community agrees that this is the direction we want to go in.
There are a few questions that remain outstanding, however:
What do others think of this? =============================
Does Phabricator address the concerns that others, including those outside of the usual GHC development community, have raised about our issue tracking in the past? It would be interesting to hear some outside voices.
How do we handle the stable branch? ===================================
One important role that the issue tracker plays is ensuring that patches are backported to the stable branch when appropriate. In Trac we handle this with a "merge" state (indicating that the ticket has been fixed in `master`, but the fix needs to be backported) and the milestone field (to indicate which release we want to backport to).
A significant amount of GHC's maintenance load is spent backporting and updating tickets, so it's important that this process works smoothly and reliably. I think this is may be an area where Phabricator could improve the status quo since the workflow currently looks something like this,
1. Someone merges a patch to `master` fixing an issue; if the commit message mentions the ticket number then our infrastructure automatically leaves a comment referencing the commit on the ticket.
2. Someone (usually the committer) places the ticket in `merge` state and sets the milestone appropriately
3. I merge the patch to the stable branch
4. I close the ticket and manually leave a comment mentioning the SHA of the backported commit.
In particular (4) is more work than it needs to be; ideally comment generation would be automated as it is for commits to `master` but Trac's comment-on-commit functionality is a bit limited, so this is currently not an option.
I'm not sure what Phabricator's analogous workflow to the above might look like. It seems that Phabricator's Releeph module may be in part intended for this use-case, but it seems to have some unfortunate limitations (e.g. the inflexibility in branch naming) that make it hard to imagine it being usable in our case.
Setting aside Releeph, perhaps the best solution would be to continue with our current workflow: we would retain the "status" state and milestone projects would take the place of the current "milestone" field. If I'm not mistaken Phabricator can be configured to mention commits on stable branches in the ticket history, so this should help point (4).
Which fields should be preserved? =================================
Our Trac instance associates a lot of structured metadata with each ticket. I generally think that this is a good thing, especially compared to the everything-is-a-tag model which I have found can quickly become unmaintainable. Unfortunately, Trac makes our users pay for these fields with a confusing ticket form.
It appears that Phabricator's Transactions [1] module may allow us to have our cake and eat it too: we can define one form for users to create tickets and another, more complete form for developer use. In light of this I don't see why we would need to fall back to the everything-is-a-tag. Matthew, what did you feel was less-than-satisfactory about the proper-fields approach? I fear that relevant metadata like GHC version, operating system and architecture simply won't be provided unless the user is explicitly prompted; I personally find the cue to be quite helpful. Presumably contributors can set Herald rules for notification on these fields if they so desire.
In the particular case of the "Component" field, I personally try to set this correctly when possible and have certainly found it useful as a search criterion. However, I suspect it would be fine as a tag. I also know that Simon PJ is quite fond of the test case field (although few others as as diligent in keeping this one up to date).
How would we migrate and what will become of Trac? ==================================================
The mechanics of migration will take time and effort to work out. If we decide this is the right direction I think we should be cautious in setting timelines; we should take as much time as we need to do it correctly. Regardless, we should gather a consensus on the general direction before we start hashing this out.
Thanks again for your effort on this, Matthew and Dan, and sorry it took me so long to finally get these notes out.
Cheers,
- Ben
[1] https://secure.phabricator.com/book/phabricator/article/forms/
Notes =====
These were largely for my sake to keep track of the pros and cons of the two options. I've nevertheless included them here for completeness.
What does Maniphest do well? ----------------------------
* Actively developed: Phabricator will continue to improve in the future.
* Metadata: Custom fields are supported.
* Flexible user interface: Custom fields can be hidden from the new ticket form to prevent user confusion.
* Familiarity: Many users may feel more at home in Phabricator's interface; reMarkup's similarity to Markdown also helps.
* Integration: Having Phabricator handle code review, release management, and issue tracking will hopefully reduce maintenance workload.
* Notifications: Herald's rule-based notifications are quite handy.
What does Maniphest do poorly? ------------------------------
* Flexibility of search: The search options feel a bit more limiting than Trac; in particular the ability to show arbitrary columns in search results seems conspicuously missing.
* Legibility: This is admittedly to some extent a matter of aesthetics but the search results list feels very busy and is quite difficult to quickly scan. This is made exacerbated by the fact that some aspects of the the color scheme are quite low contrast (e.g. grey against white for closed tickets). This hurts quite a bit since a number of contributors spend a significant amount of time looking through lists of tickets. Perhaps we could convince the Phacility people to provide a more legible, compact presentation option.
What does Trac do well? -----------------------
* Convenient cross-referencing: while the syntax is a bit odd, once you acclimate it is quite liberating to be able to precisely cross-reference tickets, wiki documents, and comments without copying links around.
* Automation of ticket lifecycle: Trac tickets progress through their lifecycle (e.g. from "new" to "patch" to "merge" to "closed" statuses) through predefined actions. This means that moving a ticket through its lifecycle typically only requires one click and the right thing happens with no additional effort. I think this is a great model, although in practice it's not clear how much we benefit from it compared to a typical Maniphest workflow.
* Rich metadata: Tickets can have a variety of metadata fields which can be queried in sophisticated ways .
What does Trac do poorly? -------------------------
* Familiarity: Many users feel rather lost in Trac
* Active development: Trac is largely a stagnant project.
* Spam management: Keeping spam at bay has been a challenge. We seem to have it under control at the moment, but I wonder how long this will last for.
* Safety: I have personally lost probably a half-dozen hours of my life to Trac eating comments.
* Integration with code review workflow: We use Phabricator for CI and code review; the only thing that remains on Trac are our tickets and the Wiki. Keeping these two resources in sync is time-consuming and error-prone.
* Full text search: Trac's full text search capabilities are generally terrible. While I've tried working around this using PostgreSQL's native full text search functionality, the result is poorly integrated into Trac and consequently hard to use.
* Customizability of the ticket form: While the rich metadata that Trac supports can be very helpful developers, it can also be confusing to users. Ideally we would hide these fields but Trac does not give us the ability to do so.
* Relations between tickets: Trac has essentially no first-class notion of ticket relatedness. Even duplicate tickets need to be manually annotated in both directions.
* Keywords are hard to discover and apply
* Fine-grained notification support is nearly non-existent

Matthew Pickering
Dear devs,
I have completed writing a migration which moves tickets from trac to phabricator. The conversion is essentially lossless. The trac transaction history is replayed which means all events are transferred with their original authors and timestamps. I welcome comments on the work I have done so far, especially bugs as I have definitely not looked at all 12000 tickets.
We discussed this a bit in this week's GHC call and the general feeling was that it would be nice to have a comprehensive list of the pros and cons somewhere. I pasted my notes on the Wiki [1] as a starting point. Matthew, would you like to add your thoughts there as well? Cheers, - Ben [1] https://ghc.haskell.org/trac/ghc/wiki/Phabricator/Maniphest

I experimented a bit more with subprojects and I was able to add a +6
line patch to make them behave a bit better.
Specifically, the parent project now appears in the UI and auto
complete works as expected.
https://phabricator.haskell.org/M3/6/
Matt
On Tue, Jan 10, 2017 at 6:51 PM, Ben Gamari
Matthew Pickering
writes: Dear devs,
I have completed writing a migration which moves tickets from trac to phabricator. The conversion is essentially lossless. The trac transaction history is replayed which means all events are transferred with their original authors and timestamps. I welcome comments on the work I have done so far, especially bugs as I have definitely not looked at all 12000 tickets.
We discussed this a bit in this week's GHC call and the general feeling was that it would be nice to have a comprehensive list of the pros and cons somewhere. I pasted my notes on the Wiki [1] as a starting point.
Matthew, would you like to add your thoughts there as well?
Cheers,
- Ben
[1] https://ghc.haskell.org/trac/ghc/wiki/Phabricator/Maniphest
participants (8)
-
Ben Gamari
-
Edward Z. Yang
-
Manuel M T Chakravarty
-
Matthew Pickering
-
Phyx
-
Richard Eisenberg
-
Simon Peyton Jones
-
Sylvain Henry