* '''Launchpad entry:''' https://launchpad.net/launchpad-foundations/+spec/registry-simplifications * '''Created:''' <> by MatthewPaulThomas * '''Contributors:''' MatthewPaulThomas == Summary == To make Launchpad easier to use and to develop, we should reduce the number of fields associated with projects, project releases, project groups, distributions, and distribution releases. We should also rename other fields to have more user-understandable names, and rename `product` and `project` to match the names (project and project group) that they have in the UI. == Rationale == Every extra field for projects, project groups, and distributions in Launchpad makes it harder to register them and keep their records up to date. Surveying Launchpad data also shows (and our 2007 user testing suggested) that fields such as Title are little-understood. Meanwhile, what we refer to as “projects” in the UI are called “products” in the code, and what we refer to as “project groups” in the UI are called “projects” in the code. This shear is [[http://launchpad.net/bugs/164646|confusing]], especially when Launchpad developers talk with users. == Design and migration == These tables are not complete schema. They show only those fields that are involved in the simplifications. The registration and update forms for the objects should be reordered to ask for “Launchpad ID” ''after'' asking for “Name” (aka Display name) and “Summary” (aka Title). That way, later on, we can use Xml``Http to auto-suggest an ID based on the entered Name and (if necessary) Summary ([[http://launchpad.net/bugs/1503|bug 1503]]), without having to change the form yet again. === Projects === ||Product||renamed||<-3>'''Project'''|| ||'''Previous field'''||'''Migration'''||'''New field'''||'''New visible name'''||'''Example'''|| ||displayname||retained||displayname||Name||Epiphany|| ||title||migrated^*^||summary||Summary||The Web browser that gets out of your way|| ||name||relabelled||name||Launchpad ID||epiphany-web|| ||summary||prepended as “''summary''\n\n”||<(|2>description||<(|2>Description||<(|2>Epiphany is a GNOME web browser based on the Mozilla rendering engine...|| ||description||retained|| ||lastdoap||dropped|| ^*^The migration of the compulsory `.title` field to an optional single-line `.summary` (the previous multi-line `.summary` having been merged with `.description`) is informed by what sort of data people have entered in `.title` up till now. According to [[https://pastebin.canonical.com/1124/|a sample of 200 randomly-chosen projects]], their behavior has had three noticable patterns. * In 30% of the sample, `.title` is case-insensitively identical to `.displayname`. (As an idea of the representativeness of this sample, Stuart Bishop reports that this proportion in ''all'' projects is 1978/5997, or 33%.) * In 16%, `.title` is exactly of the form “''`displayname`''` - `''`useful summary`''” or “''`displayname`''`: `''`useful summary`''”. * In 31% others, `.title` appears to be a useful summary of the project. (In some of them the displayname is repeated in various ways that would be hard to extract.) In the remaining 23%, `.title` is either junk or uncategorizable. (In some of these, the project as a whole appears to be junk, and once the project is deleted its `.title` won’t matter.) Therefore, we should follow this pseudocode in migrating `.title` to `.summary` for both projects and project groups: `strippedtitle` = `.title` with leading and trailing whitespace stripped<
> if `strippedtitle` is case-insensitively equal to `.displayname` with leading and trailing whitespace stripped: .summary = "" elseif `strippedtitle` is of the form “''`displayname`''` - `''`text`''” or “''`displayname`''`: `''`text`''”: .summary = `strippedtitle` with `displayname` and punctuation removed else: `.summary` = `strippedtitle` endif ||Productseries||renamed||<-3>'''Projectseries'''|| ||'''Previous field'''||'''Migration'''||'''New field'''||'''New visible name'''||'''Example'''|| ||name||retained||name||Name||1.0|| ||summary||retained||summary||Summary||the big one.|| The `Projectseries` fields need not change, because there is no separate `displayname`, `title`, or `description` field. (`summary` is so-called because it’s a single-line field.) ||Productrelease||renamed||<-3>'''Projectrelease'''|| ||'''Previous field'''||'''Migration'''||'''New field'''||'''New visible name'''||'''Example'''|| ||codename||retained||codename||Code name||canaveral|| ||version||retained||version||Version||2.0|| ||summary||prepended as “''summary''\n\n”||<(|2>description||<(|2>Description||<(|2>Launchpad 2.0 introduces easier project setup and maintenance, feeds, search, and simpler navigation...|| ||description||retained|| ||datereleased||retained|| `Productrelease` should have a generated `displayname` property that is equal to `codename` before `datereleased`, and `version` from `datereleased` onward. ||Productreleasefile||renamed||'''Projectreleasefile'''|| ||Productlabel||renamed||'''Projectlabel'''|| ||Productsvnmodule||renamed||'''Projectsvnmodule'''|| === Project groups === ||Project||renamed||<-3>'''Projectgroup'''|| ||'''Previous field'''||'''Migration'''||'''New field'''||'''New visible name'''||'''Example'''|| ||displayname||retained||displayname||Name||Mozilla|| ||title||migrated as above||summary||Summary||Developers of Firefox, Thunderbird, Sunbird, and other Internet-related software.|| ||name||relabelled||name||Launchpad ID||mozilla|| ||summary||prepended||<|3>description||<|3>Description||<(|3>Mozilla was born as the codename for Netscape Navigator, which helped ignite the open source revolution when its code was released in 1998...|| ||description||retained|| ||wikiurl||if present, appended as “\n\nWiki: ''url''”|| ||freshmeatproject||dropped|| ||sourceforgeproject||dropped|| ||lastdoap||dropped|| ||projectrelationship||renamed||'''projectgrouprelationship'''|| === Distributions === ||<-5>'''Distribution'''|| ||'''Previous field'''||'''Migration'''||'''New field'''||'''New visible name'''||'''Example'''|| ||displayname||retained||displayname||Name||Ubuntu|| ||title||dropped|| || ||introduced||summary||Summary||||<(>Linux for human beings|| ||name||relabelled||name||Launchpad ID||ubuntu|| ||description||retained||description||Description||Ubuntu is a complete Linux-based operating system, freely available with both community and professional support...|| ||domainname||dropped|| Here we should not migrate `.title` to `.summary`, because of [[https://launchpad.net/distros|the 18 currently-registered distributions]], only two of them ([[https://launchpad.net/fluxbuntu|Fluxbuntu]] and [[https://launchpad.net/redflag-midinux|Red Flag MID]]) have `.title`s that contain summaries at all. The rest of them are repetitions of (or redundant expansions of the acronym in) the `.displayname`. ||<-5>'''Distroseries'''|| ||'''Previous field'''||'''Migration'''||'''New field'''||'''New visible name'''||'''Example'''|| ||version||retained||version||Version||8.04|| ||displayname||renamed||codename||Code name||Hardy|| ||name||relabelled||name||Launchpad ID||hardy|| ||title||dropped|| ||summary||renamed||description||Description||Hardy is the second Long Term Support ("LTS") release of Ubuntu, with a strong emphasis on supportability for long term deployments on both the desktop and the server...|| In the Web UI, `.codename` should be used before a series is released, and `.version` afterward (though the codename should still be mentioned on the Overview page). This should be done using a generated property, which should be called `.displayname` for compatibility with other object types. == People == ||<-5>'''Person'''|| ||'''Previous field'''||'''Migration'''||'''New field'''||'''New visible name'''||'''Example'''|| ||displayname||retained||displayname||Name||Fred Bloggs|| ||name||relabelled||lpid||Launchpad ID||fredb|| == Implementation process == The changes should be implemented in several small branches, for easier reviewing and landing, and so that some of the benefit arrives as soon as possible. For these changes we do not expect that landing them gradually will harm users’ mental models, because registration and changing of project/person details is an infrequent activity. On the contrary, we are introducing new meanings for the terms "Name" and "Summary" that will make much more sense to new registrars, but may be confusing for existing registrars. The ''more'' time elapses between our use of the different meanings, the dimmer will be existing registrars’ memories of the old meanings, so the easier they will accept the new meanings. To maximize that time elapsed (without deliberately waiting), we should retire the old meanings before doing all the other changes, and introduce the new meanings after doing all the other changes. Therefore, the simplifications should be implemented in this order. 1. {o} Relabel `person.name` from “Name” to “Launchpad ID”, reordering relevant forms. 1. {o} Relabel `product.name` from “Name” to “Launchpad ID”, reordering relevant forms ([[http://launchpad.net/bugs/131036|bug 131036]]). 1. {o} Relabel `project.name` from “Name” to “Launchpad ID”, reordering relevant forms. 1. {o} Relabel `distribution.name` from “Name” to “Launchpad ID”, reordering relevant forms. 1. {o} Relabel `distroseries.name` from “Name” to “Launchpad ID”, reordering relevant forms. 1. {o} Set [[http://launchpad.net/bugs/31747|bug 31747]] ("Summary" and "Description" are redundant for distributions, distro series, projects, project groups) as In Progress. 1. {o} Merge `product.summary` into `product.description` (setting [[http://launchpad.net/bugs/102273|bug 102273]] as In Progress). 1. {o} Merge `productrelease.summary` into `productrelease.description`. 1. {o} Merge `project.summary` into `project.description`. 1. {o} Merge `distribution.summary` into `distribution.description`. 1. {o} Merge `distroseries.summary` into `distroseries.description` ([[http://launchpad.net/bugs/125385|bug 125385]]). 1. {o} Set bug 31747 as Fixed. 1. {o} Merge `project.wikiurl` into `project.description`. 1. {o} Migrate `product.title` into `product.summary` ([[http://launchpad.net/bugs/4449|bug 4449]], and fixing [[http://launchpad.net/bugs/102273|bug 102273]]). 1. {o} Migrate `project.title` into `project.summary` ([[http://launchpad.net/bugs/1853|bug 1853]]). 1. {o} Replace `distribution.title` with the optional `distribution.summary`. 1. {o} Drop `distroseries.title`. 1. {o} Introduce the `productrelease.displayname` property, and use it consistently in the UI. 1. {o} Introduce the `distroseries.displayname` property, and use it consistently in the UI (''e.g.'' [[http://launchpad.net/bugs/185328|bug 185328]]). 1. {o} Drop `distribution.domainname` ([[http://launchpad.net/bugs/181725|bug 181725]]). 1. {o} Set [[http://launchpad.net/bugs/109153|bug 109153]] as In Progress. 1. {o} Rename `projectrelationship` to `projectgrouprelationship`. 1. {o} Rename `project` to `projectgroup`. 1. {o} Rename `productreleasefile` to `projectreleasefile`. 1. {o} Rename `productrelease` to `projectrelease`. 1. {o} Rename `productlabel` to `projectlabel`. 1. {o} Rename `productsvnmodule` to `projectsvnmodule`. 1. {o} Rename `product` to `project`. 1. {o} Verify that no other `product`-related tables have been introduced in the meantime. 1. {o} Set [[http://launchpad.net/bugs/109153|bug 109153]] as fixed. 1. {o} Drop `project.lastdoap`, `projectgroup.lastdoap`, `projectgroup.freshmeatproject`, and `projectgroup.sourceforgeproject`. 1. {o} Relabel `person.displayname` from “Display name” to “Name”. 1. {o} Relabel `product.displayname` from “Display name” to “Name”. 1. {o} Relabel `project.displayname` from “Display name” to “Name”. 1. {o} Relabel `distribution.displayname` from “Display name” to “Name”. == Future work == * Consider dropping the various project URL fields: ||description||retained||<(|5>description||<(|5>Description||<(|5>Epiphany is a GNOME web browser based on the Mozilla rendering engine...|| ||screenshotsurl||if present, appended as “\n\nScreenshots: ''url''”|| ||wikiurl||if present, appended as “\n\nWiki: ''url''”|| ||listurl||if present, appended as “\n\nMailing list: ''url''”|| ||downloadurl||if present, appended as “\n\nDownload: ''url''”|| * Change the new-project, new-project-group, and new-distribution forms to use Xml``Http to auto-suggest an ID based on the entered Name and (if necessary) Summary ([[http://launchpad.net/bugs/1503|bug 1503]]). == Unresolved issues == * Which is the most reliable way to determine whether a distribution series is released? `.releasestatus`, or `.datereleased`?