Size: 17650
Comment:
|
Size: 23190
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 3: | Line 3: |
= Registry User Stories = | |
Line 9: | Line 8: |
== Branded Launchpad (bugs.foo.org) == '''Story Points:''' 100 As a project owner, <<BR>> I want my project pages to appear at lp.mydomain.org;<<BR>> so that my user can go to one domain and find everything they need to contribute to my project. '''Notes:''' |
------ = Registry epics and their stories = These stories are understood and have been estimated. ----- == Epic: Project management == Creating and maintaining a project is too hard. It is not clear how to create and organise a project as the owner wants. It is not possible to see that the project is setup as the owner intends. Unneeded data can be removed from the models to reduce th clutter of information. Project creation should be easier and faster by adopting common patterns to organise a project. The roles teams play in a project must be obvious to new contributors as well as project officials. ---- <<Anchor(release-sftp-uploads)>> === SFTP uploads for releases === {{{ As a project driver, I want upload large files reliably, so that I don't need to make repeated attempts because HTTP is unreliable. }}} :: :: '''Story Points:''' 20 :: Notes * Work around problems with HTTP posts of large files. ---- <<Anchor(merging-projects)>> === Merging projects === {{{ As a Registry Administrator, I want want to merge a duplicate project with the real project, so that there is a single definitive location for an upstream project. }}} :: :: '''Story Points:''' 13 :: '''bug:''' https://bugs.launchpad.net/bugs/110237 :: Notes * Being able to merge two separate projects, see bug 135026 and bug 131933. * This may depend upon project-aliases. An alias may be wanted to preserve the duplicate project name. * What information, if any should be preserved from the duplicate? * The real project should not be changed * By replacing the duplicate project with the real project, bugs, questions, blueprints, code, packages, etc will be assigned to the true project. ---- <<Anchor(project-creation-and-disclosure)>> === Project creation and disclosure === {{{ As a LP administrator, I want to make sure that newly created projects are not visible on the home page and searches until I approve them, so that I can prevent bogus projects from appearing on LP }}} :: :: '''Story Points:''' 8 :: Notes * Change project active flag to a status flag * Will probably want to rename `PillarName.active` to `PillarName.status` as well * UI notification when the project is in the NEW state * Add 'no-index' meta tag for new project pages * Every place that filters on ACTIVE must also filter on NEW * Change projects/+review-licenses to support new project review. This will include a rename of the page. * User can use the project right away. ---- <<Anchor(placeholder-product-registration)>> === Placeholder product registration === {{{ As a Launchpad user I want to be able to quickly register a new project which I'm not the owner of and know little about, so that I can send bug reports upstream }}} :: :: '''Story Points:''' 8 :: Notes * Collect the minimum information to create a project. * Indicate that the project is a place holder that can be claimed. * See [[https://launchpad.net/launchpad/+spec/drive-thru-product-creation|drive-thru-product-creation]] ---- <<Anchor(link-ppas-to-projects)>> === Link PPAs to projects === {{{ As a project owner, I want to mark a PPA as the official repo, so that users can easily get the official packages. }}} :: :: '''Story Points:''' 5 :: Notes * Allow an upstream project to say "this is my official PPA" * Deliverables: * A schema change linking the project to the PPA. * A vocabulary of PPAs for the official PPA field. * Display the widget in the edit project page. * Display the "Official PPA:" label with a link to the +archive page. * The challenge is creating a vocabulary of PPAs associated with himself and the teams he is a member of. * Barry suggests adding a widget to every PPA that has a list of all the projects the person is a admin of. This does not seem natural since the I could browse Launchpad to any projects PPA and claim that it supplies my project's official pacakges. ---- <<Anchor(project-information)>> === Link teams and people to projects for informational purposes === {{{ As a user, I want know a project's goals and how it is organised, so that I can get involved. }}} :: :: '''Story Points:''' 3 :: '''bug:''' [[https://bugs.edge.launchpad.net/launchpad-foundations/+bug/179561|Not obvious how to get involved with a project]] :: Notes * This story depends upon the [Start the project registration process] story. Allow owners to create teams to play roles in the project hierarchy. * A page that lists the teams associated with a project and the roles they play * Each team is linked so that the user can join the page. * Does each team need description or statement of purpose? * There are two kinds of links to this page: * [View the project organisation] * [Join the project] * If a graphic presentation is needed for the team org chart more story points are required. ---- <<Anchor(download-counters)>> === File releases download counters === {{{ As a Launchpad user interested in a particular downloadable file, I want to see how many times the file has been downloaded over its lifetime, so that I can judge the popularity of the file. }}} :: :: '''Story Points:''' 5 :: Notes * Done using a script that processes the access log. * Could be done by by updating the database on every GET. But supposedly the latter technique has been tried before and ran into performance problems. * Should the database update be done within Launchpad or within the librarian? (The earlier attempt did it within the librarian.) ----- == Epic: Project Planning == Project planing is a mess. Projects are not using series, milestones and release consistently. Even well planned projects have made mistakes, in part because the information is poorly presented. The model of series, milestones, and releases must be fixed so that their relationship is clear. Launchpad must use the objects consistently even when offering users features that allow them to do several operations in a single step. A timeline or diagram is needed to present the project's plan. The timeline should be interactive so that the driver of the project can see what he id doing and has done. ---- <<Anchor(release-from-milestone)>> === Making releases from milestones === {{{ As a project maintainer, I want to mark a milestone as "released", so that the release can be done (and end-users can download files, look at the changelog, etc). }}} :: :: '''Story Points:''' 3 :: Notes * Record the relationship. * [[https://bugs.edge.launchpad.net/launchpad/+bug/174468|Bug 174468: Solving the release/milestone split]] ---- <<Anchor(branch-series)>> === Branching series === {{{ As a project maintainer, I want to branch the trunk series;, so that I can make a stable release and create further point releases in the future. }}} :: :: '''Story Points:''' 3 :: Notes * Create a series. * Save the series from which it was created. * Provide any visual indication that the series was branched from another. * Text mockup: {{{ - Trunk (* branch into a new series) - Trunk (* branch into a new series) - 1.3 (* branch into a new series) Wee Project - Trunk Kiwi - Trunk (currently at 3.X) - 1.X - 2.X The Linux Kernel - Trunk - 2.2 - 2.4 - 2.6 - 2.6.20 - 2.6.21 }}} ---- <<Anchor(moving-releases)>> === Moving releases from one series to another === {{{ As a project administrator, I want to change which series a particular release belongs to, so that I can move a release from trunk to one of my existing series, or fix misclassifications. }}} :: :: '''Story Points:''' 1 :: Notes * This cannot be done until after milestones can be turned into releases; milestones will be the only provider of series information. ---- <<Anchor(packaging-link-population)>> === Packaging link population === {{{ As a upstream project tracker, I want product release packages automatically linked to distribution sourcepackges, so that I do not need search the tarball releases and do it myself. }}} :: :: '''Story Points:''' 20 :: Notes * Use our tarball imports to detect packaging links and modified orig.tar.gzs * Soyuz receives source packages via the upload path * Soyuz unpacks those source packages and for "normal" packages, inside them are .orig.tar.gzs * Our productreleasefinder script -- when it works -- pulls in tarballs and creates series and releases based on their filenames. * Some of those tarballs will be identical to a package's orig * When they are, add a packaging link between that series and the sourcepackage's series. * However, where does the "detect modified org.tar.gz" come in to the equation? If the orig.tar.gz changes, that means there's a new upstream release generally. ----- == Epic: Users and Teams == Refinements and features that improve users and teams. ---- === Members contacting members === {{{ As a launchpad team member, I want to contact all the launchpad team members, to inform them of an important event. }}} :: :: '''Story Points:''' 2 :: Notes * All members get the email, so the teams mailing list will not be used * Link title must state who is being conacted (the whole team) * Update the headers and footers of the message ---- === Non-members contacting team admin === {{{ As a user, I want to contact the fnord team, to as a question about what they do. }}} :: :: '''Story Points:''' 2 :: Notes * The email goes to the team admin who can choose to reply or delegate the reply to another team member. * by restricting who gets the email we are: * Reducing the opportunity to send send spam. * Reducing the opportunity to leak a membership in a private membership teams. * Link title must state who is being conacted (the whole team) * Update the headers and footers of the message ---- === Suspend users via the UI === {{{ As a launchpad admin, I want to disable an account from the UI, to reduce the risk of mistakes and save time. }}} :: :: '''Story Points:''' 2 :: Notes * Fixes https://bugs.launchpad.net/bugs/49676 [Disable account from the user's page] * The SQL query already exists to deactivate * Do we need a reverse query to reactivate a user...I think not. * Add the operation to the user's profile page or the edit page. ---- <<Anchor(personal-subscription-page)>> === Personal Subscription Page === {{{ As a LP user, I want to have a single page with all my email subscriptions (lists, bugs, answers, branches, etc.) with a link to the appropriate unsubscription page, so that I can individually manage (start and stop) each email source }}} :: :: '''Story Points:''' 20 :: Notes * Displaying team subscription. ----- == Epic: Messaging == Launchpad can be a better tool for communication between users and teams. Launchpad must reconcile the desire for privacy (hidden email addresses) with the need to send messages. Users are often confused as why they receive emails from launchpad, nor do they know how to manage them. The value that mailing lists provide is in part undermined by the fact that teams convey privileges--users cannot subscribe to lists for teams that they are no members of. Launchpad needs a feature that allows a user to see and manage his email subscriptions. Users need a means to contact each other, even when their email addresses are hidden. Decouple the requirement to be a member of a team so that users can read emails. Community members with a good standing should be permitted to post to anything on Launchpad. ---- <<Anchor(mailing-list-lurkers)>> === Let people lurk on mailing lists === {{{ As a Launchpad user, I want to be able to subscribe to a list even if I'm not a member of the team, so that I passively follow discussion of projects I'm interested in. }}} :: :: '''Story Points:''' 2 :: '''bug:''' [[https://bugs.launchpad.net/bugs/194126|Let people lurk on mailing lists]] :: Notes * Adjust the query and constraints * Little bit of u/i change ----- <<Anchor(nosy-mailing-list-threads)>> === Nosy mailing list threads === {{{ As a non-subscriber to a list, I want to receive follow-ups messages to threads that I posted on, so that I can follow the discussion. }}} :: :: '''Story Points:''' 8 :: Notes * Mailman 2.1 doesn't support really that model yet * This may depend on lurking. ----- <<Anchor(vacation)>> === Vacation === {{{ As a LP user, I want to tell LP that I'm going on "vacation" until a specified date, so that LP will stop sending me non-urgent emails during that time. }}} :: :: '''Story Points:''' 8 :: Notes ----- <<Anchor(mailing-list-feeds)>> === Mailing List Feeds === {{{ As a Launchpad user, I want to subscribe to a feed containing all the latest mailing list messages, so that I follow the list through my feed reader. }}} :: :: '''Story Points:''' 8 :: Notes * Get the messages out of Mailman or capture metadata for each message * Display messages using the Feeds API * Figure out what text to display for each message ----- <<Anchor(mailing-list-traffic)>> === Visibility of mailing list traffic to Launchpad === {{{ As a user, I want know how much traffic a list gets per month, so that I know how much mail I am committing to read. }}} :: :: '''Story Points:''' 5 :: Notes * Need a cronscript to generate stats daily, or weekly. * Numbers are generated for each mailing list * The numbers can be generated from via: * Mhonarc's archive * Mailman's logs * A schema change is needed to store the weekly stats * No more than 13 weeks of stats are needed * The information can be presented as a portlet/viewlet on the team page. * Since users can subscribe to all team mailinglists from their email page, the viewlet is needed there too. ---- <<Anchor(mailing-list-imap-archive)>> === IMAP Archive === {{{ As a Launchpad user, I want to access an IMAP folder containing a mailing list archive, so that I can read, search, and reply to mailing list messages. }}} :: :: '''Story Points:''' 5 :: Notes * Anonymous access. * Dovecot can serve the MHonarc mbox archive directly * UI. ---- <<Anchor(archive-persistent-urls)>> === Persistent mailing list archive urls === {{{ As mailing list user, I want each mailing list message to contain a link to the archived message, so that I can view the thread on the web. }}} :: :: '''Story Points:''' 0.5 :: Notes * Requires MHonarc supports for those URL. ----- <<Anchor(remote-mailing-list)>> === Remotely hosted mailing lists === {{{ As a project owner, I want to run the mailing list on my own server, but get the membership info from Launchpad from the LP API, so that I can customize the list to my liking. }}} :: :: '''Story Points:''' 13 :: Notes * add a 'hosted' flag on `IMailingList` * add an Mailing List API allowing to retrieve the members of the list. * Open source queue runner that updates the list using API. * All management done through LP. * No first post-moderation. * Two differences experience for Lists on Page. * u/i for posting address and archive link ---- <<Anchor(private-projects)>> == Epic: Privacy == Users cannot work in teams or projects privately. While membership in a team can be hidden the team, and its activities cannot. It is not possible to hide a project from unprivileged users. Commercial and private groups cannot project their data on Launchpad. Launchpad must allow users to work in private so that teams and projects can work without exposing their data and or activities to other users. ---- === Hide team names === {{{ As an owner of a private team, I want non-members to see my team name as <undisclosed> when my team is listed, so that non-members cannot deduce that my team exists, or what my team is doing. }}} :: :: '''Story Points:''' 8 :: Notes * This helps OEM. * Fixes https://bugs.launchpad.net/bugs/294719 [OOPS when trying to subscribe a private team to a bug] * This looks like an expensive SQL operation like private bugs. * Consider updating Launch``Bag or some other omnipresent object to have a lazy cache of all private teams and project that the principle has access to. * The name attribute must return None, to prevent leakage. * Kawalski, give me options: A. Change name and displayname on the model to perform a permissions check. A. Use an adapter on every request layer that redefines the name and the displayname to do the security check ---- === Hide team === {{{ As the owner of a private team, I want non-members to get a 404 status when they access team pages, so that non-members cannot deduce my team exists, and what my team is doing. }}} :: :: '''Story Points:''' 5 :: Notes * This helps OEM. * Relates to https://bugs.launchpad.net/bugs/298152: [We should have a very visible indication for private projects] * We want to present the team name as blacklisted if someone tries to register it. Consider using a new prefix for private teams and projects. * We want to raise a NotFoundError during traversal when the user does not have permission to access the person (or project): Navigation._publishTraverse looks like the place to do this. ---- === Create private projects === {{{ As a field engineer, I want a private project that is completely invisible to unauthorized people, so that our OEM project can operate without any data leakage. }}} :: :: '''Story Points:''' 20 :: Notes * Leaking of the project's name may be acceptable. * The story points include private teams, which will be broken into separate stories. * This needs re-estimation. ---- == Epic: Branded Launchpad (bugs.foo.org) == {{{ As a project owner, I want my project pages to appear at lp.mydomain.org, so that my user can go to one domain and find everything they need to contribute to my project. }}} :: :: '''Story Points:''' 100 :: Notes |
Line 31: | Line 641: |
* User expections: brand also the skin and integrate with Launchpad. <<Anchor(personal-subscription-page)>> == Personal Subscription Page == '''Story Points:''' 20 As a LP user,<<BR>> I want to have a single page with all my email subscriptions (lists, bugs, answers, branches, etc.) with a link to the appropriate unsubscription page;<<BR>> so that I can individually manage (start and stop) each email source '''Notes:''' * Displaying team subscription. <<Anchor(private-projects)>> == Create private projects == '''Story Points:''' 20 As a field engineer,<<BR>> I want a private project that is completely invisible to unauthorized people;<<BR>> so that our OEM project can operate without any data leakage.<<BR>> '''Notes:''' * Leaking of the project's name may be acceptable. * The story points include private teams, which will be broken into separate stories. * This needs re-estimation. <<Anchor(remote-mailing-list)>> == Remotely hosted mailing lists == '''Story Points:''' 13 As a project owner,<<BR>> I want to run the mailing list on my own server, but get the membership info from Launchpad from the LP API;<<BR>> so that I can customize the list to my liking. '''Notes:''' * add a 'hosted' flag on `IMailingList` * add an Mailing List API allowing to retrieve the members of the list. * Open source queue runner that updates the list using API. * All management done through LP. * No first post-moderation. * Two differences experience for Lists on Page. * u/i for posting address and archive link <<Anchor(project-creation-and-disclosure)>> == Project creation and disclosure == '''Story Points:''' 8 As a LP administrator, <<BR>> I want to make sure that newly created projects are not visible on the home page and searches until I approve them;<<BR>> so that I can prevent bogus projects from appearing on LP '''Notes:''' * Change project active flag to a status flag * Will probably want to rename `PillarName.active` to `PillarName.status` as well * UI notification when the project is in the NEW state * Add 'no-index' meta tag for new project pages * Every place that filters on ACTIVE must also filter on NEW * Change projects/+review-licenses to support new project review. This will include a rename of the page. * User can use the project right away. <<Anchor(vacation)>> == Vacation == '''Story Points:''' 8 As a LP user,<<BR>> I want to tell LP that I'm going on "vacation" until a specified date; <<BR>> so that LP will stop sending me non-urgent emails during that time.<<BR>> <<Anchor(mailing-list-feeds)>> == Mailing List Feeds == '''Story Points:''' 8 As a Launchpad user,<<BR>> I want to subscribe to a feed containing all the latest mailing list messages; <<BR>> so that I follow the list through my feed reader. '''Notes:''' * Get the messages out of Mailman or capture metadata for each message * Display messages using the Feeds API * Figure out what text to display for each message <<Anchor(placement-product-registration)>> == Placement product registration == '''Story Points:''' 8 As a Launchpad user<<BR>> I want to be able to quickly register a new project which I'm not the owner of and know little about;<<BR>> so that I can send bug reports upstream '''Notes:''' * Collect the minimum information to create a project. * Indicate that the project is a place holder that can be claimed. * See [[https://launchpad.net/launchpad/+spec/drive-thru-product-creation|drive-thru-product-creation]] <<Anchor(nosy-mailing-list-threads)>> == Nosy mailing list threads == '''Story Points:''' 8 As a non-subscriber to a list,<<BR>> I want to receive follow-ups messages to threads that I posted on;<<BR>> so that I can follow the discussion. '''Notes:''' * Mailman 2.1 doesn't support really that model yet * This may depend on lurking. <<Anchor(mailing-list-traffic)>> == Visibility of mailing list traffic to Launchpad == '''Story Points:''' 5 <<BR>> As a user, <<BR>> I want know how much traffic a list gets per month, <<BR>> so that I know how much mail I am committing to read. '''Notes:''' * Need a cronstript to generate stats daily, or weekly. * Numbers are generated for each mailing list * The numbers can be generated from via: * Monarc's archive * Mailman's logs * A schema change is needed to store the weekly stats * No more than 13 weeks of stats are needed * The information can be presented as a portlet/viewlet on the team page. * Since users can subscribe to all team mailinglists from their email page, the viewlet is needed there too. <<Anchor(mailing-list-imap-archive)>> == IMAP Archive == '''Story Points:''' 5 As a Launchpad user,<<BR>> I want to access an IMAP folder containing a mailing list archive; <<BR>> so that I can read, search, and reply to mailing list messages. '''Notes:''' * Anonymous access. * Dovecot can serve the MHonarc mbox archive directly * UI. <<Anchor(download-counters)>> == File releases download counters == '''Story Points:''' 5 As a Launchpad user interested in a particular downloadable file,<<BR>> I can see how many times the file has been downloaded over its lifetime;<<BR>> so that I can judge the popularity of the file. '''Notes:''' * Done using a script that processes the access log. * Could be done by by updating the database on every GET. But supposedly the latter technique has been tried before and ran into performance problems. * Should the database update be done within Launchpad or within the librarian? (The earlier attempt did it within the librarian.) <<Anchor(project-aliases)>> == Project Aliases == '''Story Points:''' 5 '''Released:''' 2.1.11* As a Launchpad Administrator,<<BR>> I want to be able to give aliases to project,<<BR>> so that project can be renamed more easily and that multiple projects for the same project known under several names aren't registered. '''Notes:''' * Having more than one name redirect to the canonical url; pgsql and postgres => postgresql * [[https://launchpad.canonical.com/PillarAlias]] <<Anchor(branch-series)>> == Branching series == '''Story Points:''' 3 As a project maintainer,<<BR>> I want to branch the trunk series;,<<BR>> so that I can make a stable release and create further point releases in the future. '''Notes:''' * Create a series. * Save the series from which it was created. * Provide any visual indication that the series was branched from another. * Text mockup: {{{ - Trunk (* branch into a new series) - Trunk (* branch into a new series) - 1.3 (* branch into a new series) Wee Project - Trunk Kiwi - Trunk (currently at 3.X) - 1.X - 2.X The Linux Kernel - Trunk - 2.2 - 2.4 - 2.6 - 2.6.20 - 2.6.21 }}} <<Anchor(delete-poll)>> == Delete a poll == '''Story Points:''' 3 <<BR>> As a team administrator,<<BR>> I want to be able to delete a poll from my team;<<BR>> so that I can remove obsolete and inappropriate polls. '''Notes:''' * We'll just hide it, so need a new flag on Poll. * This is not as important as first thought. All known requests to delete a poll are because a poll is unusable if it is accidentally created in the past. It should not be possible to create a poll in the past. * The poll creation problems are fixed. This may not be a needed story anymore. <<Anchor(project-information)>> == Link teams and people to projects for informational purposes == '''Story Points:''' 3 <<BR>> '''bug:''' [[https://bugs.edge.launchpad.net/launchpad-foundations/+bug/179561|Not obvious how to get involved with a project]] As a user, <<BR>> I want know a project's goals and how it is organised, <<BR>> so that I can get involved. '''Notes:''' * This story depends upon the [Start the project registration process] story. * Allow owners to create teams to play roles in the project hierarchy. * Requires: * A page that lists the teams associated with a project and the roles they play * Each team is linked so that the user can join the page. * Does each team need description or statement of purpose? * There are two kinds of links to this page: * [View the project organisation] * [Join the project] * If a graphic presentation is needed for the team org chart more story points are required. <<Anchor(mailing-list-lurkers)>> == Let people lurk on mailing lists == '''Story Points:''' 2 <<BR>> '''bug:''' [[https://bugs.launchpad.net/bugs/194126|Let people lurk on mailing lists]] As a Launchpad user, <<BR>> I want to be able to subscribe to a list even if I'm not a member of the team,<<BR>> so that I passively follow discussion of projects I'm interested in. '''Notes:''' * Adjust the query and constraints * Little bit of u/i change <<Anchor(contact-any-lp-user)>> == Contact any Launchpad user == '''Story Points:''' 2 <<BR>> '''Released:''' 2.1.11* <<BR>> '''bug:''' [[https://bugs.edge.launchpad.net/launchpad/+bug/66105|Team admin can't contact prospective member who hides e-mail addresses]] <<BR>> '''spec:''' [[https://blueprints.edge.launchpad.net/launchpad-registry/+spec/email-any-user]] As a Launchpad user,<<BR>> I want to be able to send an email to any other Launchpad user, <<BR>> even if they have their email address hidden. '''Notes:''' * Work around hidden email addresses. <<Anchor(moving-releases)>> == Moving releases from one series to another == '''Story Points:''' 1 <<BR>> As a project administrator,<<BR>> I can change which series a particular release belongs to;<<BR>> so I can move a release from trunk to one of my existing series, or fix misclassifications. '''Notes:''' * This cannot be done until after milestones can be turned into releases; milestones will be the only provider of series information. <<Anchor(archive-persistent-urls)>> == Persistent mailing list archive urls == '''Story Points:''' 0.5 As mailing list user,<<BR>> I want each mailing list message to contain a link to the archived message;<<BR>> so that I can view the thread on the web. '''Notes:''' Requires Mhonarc supports for those URL. |
* User expectations: brand also the skin and integrate with Launchpad. ------ |
Line 377: | Line 649: |
----- == Epic: Project management == ---- |
|
Line 379: | Line 654: |
== Project access stats == '''Story Points:''' ?? As a project owner, <<BR>> I want to know the total monthly visitors to any page of my project (i.e. the sum of all hits), <<BR>> so that I can make an informed decision on whether to continue this project, adjust the assigned resources, or discontinue it. '''Notes:''' * HPLIP wants to know this. * See the [[https://lists.ubuntu.com/mailman/private/launchpad/2008-November/033943.html|Stu & Curtis: per project webstats]] discussion for some insight. <<Anchor(release-sftp-uploads)>> == SFTP uploads for releases == '''Story Points:''' ?? As a project driver, <<BR>> I want upload large files reliably; <<BR>> so that I don't need to make repeated attempts because HTTP is unreliable. '''Notes:''' * Work around problems with HTTP posts of large files. <<Anchor(merging-projects)>> == Merging projects == '''Story Points:''' ?? <<BR>> '''bug:'''https://bugs.launchpad.net/bugs/110237 As a Registry Administrator,<<BR>> I want want to merge a duplicate project with the real project; <<BR>> so that there is a single definitive location for an upstream project. '''Notes:''' * Being able to merge two separate projects, see bug 135026 and bug 131933. * This may depend upon project-aliases. An alias may be wanted to preserve the duplicate project name. * What information, if any should be preserved from the duplicate? * The real project should not be changed * By replacing the duplicate project with the real project, bugs, questions, blueprints, code, packages, etc will be assigned to the true project. <<Anchor(link-ppas-to-projects)>> == Link PPAs to projects == '''Story Points:''' ?? As a project owner, <<BR>> I want to mark a PPA as the official repo; <<BR>> so that users can easily get the official packages. '''Notes:''' * Allow an upstream project to say "this is my official PPA" |
=== Project access stats === {{{ As a project owner, I want to know the total monthly visitors to any page of my project (i.e. the sum of all hits), so that I can make an informed decision on whether to continue this project, adjust the assigned resources, or discontinue it. }}} :: :: '''Story Points:''' ?? :: Notes * HPLIP wants to know this. * See the [[https://lists.ubuntu.com/mailman/private/launchpad/2008-November/033943.html|Stu & Curtis: per project webstats]] discussion for some insight. ---- |
Line 440: | Line 671: |
== Manage project announcements through the webservice API == '''Story Points:''' ?? As a webservice client, <<BR>> I want to be able to manage my project announcements through the webservice API <<BR>> so that I can use my preferred tools. '''Notes:''' |
=== Manage project announcements through the webservice API === {{{ As a webservice client, I want to be able to manage my project announcements through the webservice API so that I can use my preferred tools. }}} :: :: '''Story Points:''' ?? :: Notes ---- |
Line 451: | Line 686: |
== Start the project registration process == '''Story Points:''' ?? As a project owner, <<BR>> I want to register a project from starting from the front page, <<BR>> So that I can easily start using launchpad. '''Notes:''' <<Anchor(packaging-link-population)>> == Packaging link population == '''Story Points:''' ?? As a upstream project tracker,<<BR>> I want product release packages automatically linked to distribution sourcepackges; <<BR>> so that I do not need search the tarball releases and do it myself. '''Notes:''' * Use our tarball imports to detect packaging links and modified orig.tar.gzs * Soyuz receives source packages via the upload path * Soyuz unpacks those source packages and for "normal" packages, inside them are .orig.tar.gzs * Our productreleasefinder script -- when it works -- pulls in tarballs and creates series and releases based on their filenames. * Some of those tarballs will be identical to a package's orig * When they are, add a packaging link between that series and the sourcepackage's series. * However, where does the "detect modified org.tar.gz" come in to the equation? If the orig.tar.gz changes, that means there's a new upstream release generally. |
=== Start the project registration process === {{{ As a project owner, I want to register a project from starting from the front page, so that I can easily start using launchpad. }}} :: :: '''Story Points:''' ?? :: Notes ------ |
Line 485: | Line 704: |
<<Anchor(private-teams)>> == Private teams == '''Story Points:''' ?? As a field engineer, <<BR>> I want to create a private team where no one can see anything except the team name and the team owner but no members can be known; it should be a restricted team by default; members of a private team can see the membership list, but no one else can; <<BR>> so that commercial projects can have teams without exposing their membership. '''Notes:''' * Being able to hide the existence of a team, while still allowing it to be used |
----- == Epic: Project management == ---- |
Line 504: | Line 710: |
== Guided product registration == '''Story Points:''' ?? As a Launchpad project owner, <<BR>> I want to be able to easily register my new project which, <<BR>> so that I can quickly invite others to participate '''Notes:''' |
=== Guided product registration === {{{ As a Launchpad project owner, I want to be able to easily register my new project which, so that I can quickly invite others to participate }}} :: :: '''Story Points:''' ?? :: Notes |
Line 517: | Line 725: |
----- == Epic Messaging == ---- |
|
Line 519: | Line 730: |
== Subscribe to all messages in all mailing lists by topic == '''Story points:''' ?? As a Launchpad user, <<BR>> I want to subscribe to all messages in all mailing lists that match my search terms, <<BR>> So that I can be informed about conversations happening on a topic of interest. '''Notes:''' |
=== Subscribe to all messages in all mailing lists by topic === {{{ As a Launchpad user, I want to subscribe to all messages in all mailing lists that match my search terms, so that I can be informed about conversations happening on a topic of interest. }}} :: :: '''Story Points:''' ?? :: Notes |
Line 529: | Line 742: |
* This is like the saved topic/search featre offered by news sties | * This is like the saved topic/search feature offered by news sties |
This section contains the story cards for the Launchpad Registry. Completed stories are moved to the VersionThreeDotO/Registry/StoryCardsArchive
Contents
Registry epics and their stories
These stories are understood and have been estimated.
Epic: Project management
Creating and maintaining a project is too hard. It is not clear how to create and organise a project as the owner wants. It is not possible to see that the project is setup as the owner intends.
Unneeded data can be removed from the models to reduce th clutter of information. Project creation should be easier and faster by adopting common patterns to organise a project. The roles teams play in a project must be obvious to new contributors as well as project officials.
SFTP uploads for releases
As a project driver, I want upload large files reliably, so that I don't need to make repeated attempts because HTTP is unreliable.
Story Points: 20
- Notes
- Work around problems with HTTP posts of large files.
Merging projects
As a Registry Administrator, I want want to merge a duplicate project with the real project, so that there is a single definitive location for an upstream project.
Story Points: 13
- Notes
- Being able to merge two separate projects, see bug 135026 and bug 131933.
- This may depend upon project-aliases. An alias may be wanted to preserve
- the duplicate project name.
- What information, if any should be preserved from the duplicate?
- The real project should not be changed
- By replacing the duplicate project with the real project, bugs,
- questions, blueprints, code, packages, etc will be assigned to the true project.
Project creation and disclosure
As a LP administrator, I want to make sure that newly created projects are not visible on the home page and searches until I approve them, so that I can prevent bogus projects from appearing on LP
Story Points: 8
- Notes
- Change project active flag to a status flag
Will probably want to rename PillarName.active to PillarName.status as well
- UI notification when the project is in the NEW state
- Add 'no-index' meta tag for new project pages
- Every place that filters on ACTIVE must also filter on NEW
- Change projects/+review-licenses to support new project review. This will include a rename of the page.
- User can use the project right away.
- Change project active flag to a status flag
Placeholder product registration
As a Launchpad user I want to be able to quickly register a new project which I'm not the owner of and know little about, so that I can send bug reports upstream
Story Points: 8
- Notes
- Collect the minimum information to create a project.
- Indicate that the project is a place holder that can be claimed.
Link PPAs to projects
As a project owner, I want to mark a PPA as the official repo, so that users can easily get the official packages.
Story Points: 5
- Notes
- Allow an upstream project to say "this is my official PPA"
- Deliverables:
- A schema change linking the project to the PPA.
- A vocabulary of PPAs for the official PPA field.
- Display the widget in the edit project page.
- Display the "Official PPA:" label with a link to the +archive page.
- The challenge is creating a vocabulary of PPAs associated with himself and the teams he is a member of.
- Barry suggests adding a widget to every PPA that has a list of all
- the projects the person is a admin of. This does not seem natural since the I could browse Launchpad to any projects PPA and claim that it supplies my project's official pacakges.
- Barry suggests adding a widget to every PPA that has a list of all
Link teams and people to projects for informational purposes
As a user, I want know a project's goals and how it is organised, so that I can get involved.
Story Points: 3
- Notes
- This story depends upon the [Start the project registration process]
- story. Allow owners to create teams to play roles in the project hierarchy.
- A page that lists the teams associated with a project and the roles they play
- Each team is linked so that the user can join the page.
- Does each team need description or statement of purpose?
- There are two kinds of links to this page:
- [View the project organisation]
- [Join the project]
- If a graphic presentation is needed for the team org chart more story points are required.
- This story depends upon the [Start the project registration process]
File releases download counters
As a Launchpad user interested in a particular downloadable file, I want to see how many times the file has been downloaded over its lifetime, so that I can judge the popularity of the file.
Story Points: 5
- Notes
- Done using a script that processes the access log.
- Could be done by by updating the database on every GET. But supposedly the latter technique has been tried before and ran into performance problems.
- Should the database update be done within Launchpad or within the librarian? (The earlier attempt did it within the librarian.)
Epic: Project Planning
Project planing is a mess. Projects are not using series, milestones and release consistently. Even well planned projects have made mistakes, in part because the information is poorly presented.
The model of series, milestones, and releases must be fixed so that their relationship is clear. Launchpad must use the objects consistently even when offering users features that allow them to do several operations in a single step. A timeline or diagram is needed to present the project's plan. The timeline should be interactive so that the driver of the project can see what he id doing and has done.
Making releases from milestones
As a project maintainer, I want to mark a milestone as "released", so that the release can be done (and end-users can download files, look at the changelog, etc).
Story Points: 3
- Notes
- Record the relationship.
Branching series
As a project maintainer, I want to branch the trunk series;, so that I can make a stable release and create further point releases in the future.
Story Points: 3
- Notes
- Create a series.
- Save the series from which it was created.
- Provide any visual indication that the series was branched from another.
- Text mockup:
- Trunk (* branch into a new series) - Trunk (* branch into a new series) - 1.3 (* branch into a new series) Wee Project - Trunk Kiwi - Trunk (currently at 3.X) - 1.X - 2.X The Linux Kernel - Trunk - 2.2 - 2.4 - 2.6 - 2.6.20 - 2.6.21
Moving releases from one series to another
As a project administrator, I want to change which series a particular release belongs to, so that I can move a release from trunk to one of my existing series, or fix misclassifications.
Story Points: 1
- Notes
- This cannot be done until after milestones can be turned into releases; milestones will be the only provider of series information.
Packaging link population
As a upstream project tracker, I want product release packages automatically linked to distribution sourcepackges, so that I do not need search the tarball releases and do it myself.
Story Points: 20
- Notes
- Use our tarball imports to detect packaging links and modified orig.tar.gzs
- Soyuz receives source packages via the upload path
- Soyuz unpacks those source packages and for "normal" packages, inside them are .orig.tar.gzs
- Our productreleasefinder script -- when it works -- pulls in tarballs and creates series and releases based on their filenames.
- Some of those tarballs will be identical to a package's orig
- When they are, add a packaging link between that series and the sourcepackage's series.
- However, where does the "detect modified org.tar.gz" come in to the equation? If the orig.tar.gz changes, that means there's a new upstream release generally.
- Use our tarball imports to detect packaging links and modified orig.tar.gzs
Epic: Users and Teams
Refinements and features that improve users and teams.
Members contacting members
As a launchpad team member, I want to contact all the launchpad team members, to inform them of an important event.
Story Points: 2
- Notes
- All members get the email, so the teams mailing list will not be used
- Link title must state who is being conacted (the whole team)
- Update the headers and footers of the message
Non-members contacting team admin
As a user, I want to contact the fnord team, to as a question about what they do.
Story Points: 2
- Notes
- The email goes to the team admin who can choose to reply or delegate the reply to another team member.
- by restricting who gets the email we are:
- Reducing the opportunity to send send spam.
- Reducing the opportunity to leak a membership in a private membership teams.
- Link title must state who is being conacted (the whole team)
- Update the headers and footers of the message
Suspend users via the UI
As a launchpad admin, I want to disable an account from the UI, to reduce the risk of mistakes and save time.
Story Points: 2
- Notes
Fixes https://bugs.launchpad.net/bugs/49676 [Disable account from the user's page]
- The SQL query already exists to deactivate
- Do we need a reverse query to reactivate a user...I think not.
- Add the operation to the user's profile page or the edit page.
Personal Subscription Page
As a LP user, I want to have a single page with all my email subscriptions (lists, bugs, answers, branches, etc.) with a link to the appropriate unsubscription page, so that I can individually manage (start and stop) each email source
Story Points: 20
- Notes
- Displaying team subscription.
Epic: Messaging
Launchpad can be a better tool for communication between users and teams. Launchpad must reconcile the desire for privacy (hidden email addresses) with the need to send messages. Users are often confused as why they receive emails from launchpad, nor do they know how to manage them. The value that mailing lists provide is in part undermined by the fact that teams convey privileges--users cannot subscribe to lists for teams that they are no members of.
Launchpad needs a feature that allows a user to see and manage his email subscriptions. Users need a means to contact each other, even when their email addresses are hidden. Decouple the requirement to be a member of a team so that users can read emails. Community members with a good standing should be permitted to post to anything on Launchpad.
Let people lurk on mailing lists
As a Launchpad user, I want to be able to subscribe to a list even if I'm not a member of the team, so that I passively follow discussion of projects I'm interested in.
Story Points: 2
- Notes
- Adjust the query and constraints
- Little bit of u/i change
Nosy mailing list threads
As a non-subscriber to a list, I want to receive follow-ups messages to threads that I posted on, so that I can follow the discussion.
Story Points: 8
- Notes
- Mailman 2.1 doesn't support really that model yet
- This may depend on lurking.
Vacation
As a LP user, I want to tell LP that I'm going on "vacation" until a specified date, so that LP will stop sending me non-urgent emails during that time.
Story Points: 8
- Notes
Mailing List Feeds
As a Launchpad user, I want to subscribe to a feed containing all the latest mailing list messages, so that I follow the list through my feed reader.
Story Points: 8
- Notes
- Get the messages out of Mailman or capture metadata for each message
- Display messages using the Feeds API
- Figure out what text to display for each message
Visibility of mailing list traffic to Launchpad
As a user, I want know how much traffic a list gets per month, so that I know how much mail I am committing to read.
Story Points: 5
- Notes
- Need a cronscript to generate stats daily, or weekly.
- Numbers are generated for each mailing list
- The numbers can be generated from via:
- Mhonarc's archive
- Mailman's logs
- A schema change is needed to store the weekly stats
- No more than 13 weeks of stats are needed
- The information can be presented as a portlet/viewlet on the team page.
- Since users can subscribe to all team mailinglists from their email page, the viewlet is needed there too.
- Need a cronscript to generate stats daily, or weekly.
IMAP Archive
As a Launchpad user, I want to access an IMAP folder containing a mailing list archive, so that I can read, search, and reply to mailing list messages.
Story Points: 5
- Notes
- Anonymous access.
- Dovecot can serve the MHonarc mbox archive directly
- UI.
Persistent mailing list archive urls
As mailing list user, I want each mailing list message to contain a link to the archived message, so that I can view the thread on the web.
Story Points: 0.5
- Notes
- Requires MHonarc supports for those URL.
Remotely hosted mailing lists
As a project owner, I want to run the mailing list on my own server, but get the membership info from Launchpad from the LP API, so that I can customize the list to my liking.
Story Points: 13
- Notes
add a 'hosted' flag on IMailingList
- add an Mailing List API allowing to retrieve the members of the list.
- Open source queue runner that updates the list using API.
- All management done through LP.
- No first post-moderation.
- Two differences experience for Lists on Page.
- u/i for posting address and archive link
Epic: Privacy
Users cannot work in teams or projects privately. While membership in a team can be hidden the team, and its activities cannot. It is not possible to hide a project from unprivileged users. Commercial and private groups cannot project their data on Launchpad.
Launchpad must allow users to work in private so that teams and projects can work without exposing their data and or activities to other users.
Hide team names
As an owner of a private team, I want non-members to see my team name as <undisclosed> when my team is listed, so that non-members cannot deduce that my team exists, or what my team is doing.
Story Points: 8
- Notes
- This helps OEM.
Fixes https://bugs.launchpad.net/bugs/294719 [OOPS when trying to subscribe a private team to a bug]
- This looks like an expensive SQL operation like private bugs.
Consider updating LaunchBag or some other omnipresent object to have a lazy cache of all private teams and project that the principle has access to.
- The name attribute must return None, to prevent leakage.
- Kawalski, give me options:
- Change name and displayname on the model to perform a permissions check.
- Use an adapter on every request layer that redefines the name and the displayname to do the security check
Hide team
As the owner of a private team, I want non-members to get a 404 status when they access team pages, so that non-members cannot deduce my team exists, and what my team is doing.
Story Points: 5
- Notes
- This helps OEM.
Relates to https://bugs.launchpad.net/bugs/298152: [We should have a very visible indication for private projects]
- We want to present the team name as blacklisted if someone tries to register it. Consider using a new prefix for private teams and projects.
We want to raise a NotFoundError during traversal when the user does not have permission to access the person (or project): Navigation._publishTraverse looks like the place to do this.
Create private projects
As a field engineer, I want a private project that is completely invisible to unauthorized people, so that our OEM project can operate without any data leakage.
Story Points: 20
- Notes
- Leaking of the project's name may be acceptable.
- The story points include private teams, which will be broken into separate stories.
- This needs re-estimation.
Epic: Branded Launchpad (bugs.foo.org)
As a project owner, I want my project pages to appear at lp.mydomain.org, so that my user can go to one domain and find everything they need to contribute to my project.
Story Points: 100
- Notes
- Commercial offering?
- Moderation?
- Update the apache config?
- How do users request the redirect? New UI pages?
How do we serve JavaScript files with the two domains?
- icing will have to be served from any domain.
- Navigation from inside the project needs to point back to Launchpad itself where appropriate.
Branded project -> need for project in URL.
- Mailing lists: tie in to Exim and MHonArc's Apache
- User expectations: brand also the skin and integrate with Launchpad.
Needs estimating
These stories will be estimated in the weekly planning meeting.
Epic: Project management
Project access stats
As a project owner, I want to know the total monthly visitors to any page of my project (i.e. the sum of all hits), so that I can make an informed decision on whether to continue this project, adjust the assigned resources, or discontinue it.
Story Points: ??
- Notes
- HPLIP wants to know this.
See the Stu & Curtis: per project webstats discussion for some insight.
Manage project announcements through the webservice API
As a webservice client, I want to be able to manage my project announcements through the webservice API so that I can use my preferred tools.
Story Points: ??
- Notes
Start the project registration process
As a project owner, I want to register a project from starting from the front page, so that I can easily start using launchpad.
Story Points: ??
- Notes
Needs definition
These stories are incomplete, not understood, and cannot be estimated.
Epic: Project management
Guided product registration
As a Launchpad project owner, I want to be able to easily register my new project which, so that I can quickly invite others to participate
Story Points: ??
- Notes
- Meet with Martin to break this into smaller stories.
Epic Messaging
Subscribe to all messages in all mailing lists by topic
As a Launchpad user, I want to subscribe to all messages in all mailing lists that match my search terms, so that I can be informed about conversations happening on a topic of interest.
Story Points: ??
- Notes
- This relates to the concept of Launchpad echelons where a user can subscribe to all message generated in launchpad on a topic
- This is like the saved topic/search feature offered by news sties
- Google is an example of such a service.
- The notification happens via web page or RSS
- While the user is informed, he does not necessarily have rights to reply.
- Google is an example of such a service.