Diff for "VersionThreeDotO/Foundations/Delivered"

Not logged in - Log In / Register

Differences between revisions 1 and 9 (spanning 8 versions)
Revision 1 as of 2008-11-24 22:25:43
Size: 3009
Editor: flacoste
Comment:
Revision 9 as of 2009-02-25 20:32:06
Size: 13068
Editor: flacoste
Comment:
Deletions are marked like this. Additions are marked like this.
Line 4: Line 4:
== API Track ==
Line 5: Line 7:
== Make API Cacheable == === Make API Cacheable ===
Line 25: Line 27:
== Make API Cacheable - client side == === Make API Cacheable - client side ===
Line 35: Line 37:
<<Anchor(api-customized-auto-generated-adapter)>>
=== API customized auto-generated adapter ===

  **Story Points:** ?\\
  **Bug:** [[https://bugs.edge.launchpad.net/launchpad-foundations/+bug/294858|#294858]].

  As a Launchpad developer,\\
  I want to be able to customize the IEntry and ICollection adapters generated
  automatically by the annotations,\\
  so that webservice-specific optimization might be made, while retaining the
  convenience of the annotated API.

  **Notes:**

    No real use cases was found for this feature.


<<Anchor(entry-etag)>>
=== Entry ETag ===

  **Story Points:** 3\\
  **Delivered:** 2.1.12
  **Bug:** [[https://bugs.edge.launchpad.net/launchpad-foundations/+bug/273176|273176]]

  As a Launchpad web service client,\\
  I want to see an entry's ETag in the representation of the entry itself;\\
  so I can make conditional requests on objects that weren't obtained through
  an individual HTTP request.


<<Anchor(mutator-as-writable-attribute)>>
== Export mutators as writable attributes ==

  **Story Points:** 3\\
  **Delivered:** 2.1.12

  As a developer,\\
  I can annotate one of an interface's methods to be the
  method invoked when the client makes a PUT or PATCH request that
  modifies the value of a particular field;\\
  so that the interface to modify most attributes is consistent.

<<Anchor(multi-hit-api)>>
=== Multi-Hit API ===

  **Story Points:**
  **Delivered:** Dropped during 2.2.1 because of no use cases

  As a webservice client,\\
  I want to be able to invoke a particular named operation or setting an
  attribute to a certain value on a set of objects;\\
  so that mass-change operation can be done efficiently.

  **Notes:**

<<Anchor(api-notification-of-server-changes-on-update)>>
=== API: Notification of Server Changes on Update ====

  **Story Points:** 3\\
  **Delivered:** 2.2.2

  As a Launchpad web service client,\\
  I want that when I do a PATCH or PUT request, the server notifies me when
  the data I specified was modified by the server;\\
  so that I don't have to make a separate GET request to update my local copy
  of the object.

  **Notes**:
   * Send updated version on failed conditional get.
   * Always send the representation back.


<<Anchor(api-html-representation)>>
=== API: HTML Representation ====

  **Story Points:**
  **Delivered:** 2.2.2

  As an AJAX client,\\
  I want to be able to specify in my request that I want an HTML rendition
  of the object I'm retrieving;\\
  so that I can update the page without having to make a separate request to a
  special fragment view.

  **Notes:**
    * Use a view lookup to find the rendition.
    * Should be available on update results also.
    * Available on collection and operation.


== AJAX Track ==
Line 38: Line 132:
  **Story Points:** 1   **Story Points:** 1\\
Line 52: Line 146:
 
  **Story Points:** 5

  **Story Points:** 5\\
Line 59: Line 153:
  so that I can detect regressions in Javascript code. 

  **Notes:**
  
  so that I can detect regressions in Javascript code.

  **Notes:**
Line 65: Line 159:
   * Hook the window fire-up and results reading from test.py or make?     * Hook the window fire-up and results reading from test.py or make?
Line 67: Line 161:
 

<<Anchor(api-js-access)>> 


<<Anchor(api-js-access)>>
Line 72: Line 166:
  **Story Points:** 5   **Story Points:** 5\\
Line 75: Line 169:
  As a Launchpad developer,    As a Launchpad developer,
Line 80: Line 174:
  
Line 84: Line 178:
  
Line 89: Line 183:
  **Story Points:** 8   **Story Points:** 8\\
Line 100: Line 194:
<<Anchor(ajax-patch)>>
=== AJAX PATCH ===

  **Story Points:** 2\\
  **Delivered:** 2.1.11\\
  **Bug:** [[https://bugs.edge.launchpad.net/launchpad-foundations/+bug/29645|#29645]]

  As a Launchpad programmer,\\
  I want to make the equivalent of a PATCH request through Ajax;\\
  so I can modify an object without having a representation of it.

<<Anchor(lazr-js-green-flash)>>
=== LAZR-JS Green Flash ===

  **Story Points:** 2\\
  **Delivered:** 2.1.12

  As a Canonical JS developer,\\
  I want to be able to use a standard green flash animation for\\
  when data has been saved successfully.


<<Anchor(lazr-js-framework)>>
=== Lazr-JS Project Bootstrap ===

  **Story Points:** 1\\
  **Delivered:** 2.1.12

  As a Launchpad developer,\\
  I want to develop, test, and publish JavaScript widgets in
  the lazr-js project,\\
  so I can share JS components with the rest of Canonical.


<<Anchor(lazr-js-reference-widget)>>
=== Lazr-JS Reference Widget ===

  **Story Points:** 5
  **Delivered:** 2.1.12

  As a Canonical JS developer,\\
  I want to have a reference implementation of a inline text editing
  widget; \\
  so that I have an example on how to write widgets.

<<Anchor(lazr-js-error-widget)>>
=== Lazr-JS Error Widget ===

  **Story Points:** 5
  **Delivered:** no use cases

  As a Launchpad user,\\
  I want AJAX errors to be reported to a single widget;\\
  so that I can navigate and retry errors.

  **Notes**:
    * See beuno's screenshot.
    * Must be available to all widgets.
    * Event-driven.
    * The use cases where such a widget would realy be useful weren't clear.
    Back to the design board.

<<Anchor(yuitest3)>>
=== Yuitest3 ===

  **Story Points:** 1
  **Delivered:** 2.2.1

  As a LAZR-JS developer,\\
  I want the Lazr-JS test suite to use the latest release of YUITest;\\
  so that I can use Mock objects in my unit tests.


<<Anchor(prepopulating-ajax-cache)>>
=== Prepopulating AJAX cache ===

  **Story Points:** 3\\
  **Delivered:** 2.2.1
  **Bug:** [[https://bugs.edge.launchpad.net/launchpad-foundations/+bug/296456|#296456]]

  As a Launchpad programmer,\\
  I want to be able to add objects in the view that will be available
  from within JavaScript;\\
  so I can present that data or modify it without to have to make an
  HTTP request.


<<Anchor(inline-text-editing)>>
=== Inline text editing ===

  **Story Points:** 3
  **Delivered:** 2.2.2

  As a Launchpad developer,
  I want a way to associate an inline text widget with the rendered element
  of a content field in view,
  so that I can easily add inline editing to text fields.

  **Notes:**

    {{{
    view/bug_title_inlinet_widget
    bug_title_inline_widget = InlineTextWidget(self.context, 'title')
}}}

<<Anchor(lazr-popup)>>
=== LAZR Popup ===

  **Story Points:**
  **Delivered:** 2.2.2

  As a Launchpad developer,\\
  I want a pop-up widget in which I can add custom code;\\
  so that I have a common look and feel across all pop-up widgets.

  **Notes:**
   * Done during the Lazr-JS February sprint.


== Infrastructure Track ==
Line 103: Line 318:
  **Story Points:** 8   **Story Points:** 8\\
Line 111: Line 326:


<<Anchor(ec2-test-runner)>>
=== EC2 Test Runner ===

  **Story Points:** 3

  As a Launchpad developer,\\
  I want an easy way to run the test suite on EC2;\\
  so that I can submit a branch to PQM with confidence that the test suite
  will pass.


<<Anchor(lazr.config)>>
=== lazr.config ===

  **Story Points:** 3
  **Delivered:** 2.1.12

  As a python developer,\\
  I want to download lazr.config from the Cheeseshop;\\
  so that I can use it for process configuration in my project.

  **Notes:**
    * Why not brand it as canonical? Find a top-level package name.
    * Missing some documentation.
    * Convert setup tools.
    * Reorganize project directory structure.
    * License? For all of lazr?


<<Anchor(5-minutes-pqm-merge)>>
=== 5 minutes PQM merge ===

  **Story Points:** 8\\
  **Delivered:** 2.1.12

  As a Launchpad developer,\\
  I want a continuous integration system that will notify me when a
  commit I made breaks the test suite;\\
  so that I can merge to PQM without running tests.

  **Notes:**
    * Need to deploy only known good branch.
    * Uses buildbot.

<<Anchor(buildbot-ec2slave)>>
=== Buildbot EC2 Slave ===

  **Story Points:** 5\\
  **Delivered:** 2.2.1

  As a LOSA,\\
  I want to deploy buildbot using on-demand slave running on EC2;
  so that we can host the 5-minutes-PQM infrastructure withing the
  data center.

  **Notes:**
    * Deploy on devpad running slave on demand in ec2.


<<Anchor(merge-ec2-latent-slave-upstream)>>
=== Merge EC2 latent slave upstream ===

  **Story Points:** ??
\
  **Delivered:** 2.2.1

  As a Launchpad developer,\\
  I want our ec2 latent slave code merged upstream;\\
  so that it can be maintained by the community.


<<Anchor(separate-db-branch)>>
=== Separate DB branch ===

  **Story Points:** 2\\
  **Delivered:** 2.2.2

  As the Launchpad release manager,\\
  I want features requiring DB changes to be landed on a separate branch;\\
  so that we can land DB-related changes earlier in the cycle and also keep edge updated during the whole cycle.

  **Notes:**
    * Pre-supposes the buildbot integration system.
    * Maintain the staging/rollout branch automatically (merging trunk in the DB branch).


<<Anchor(5-minutes-PQM-for-dependencies)>>
=== 5 minutes PQM for dependencies ===

  **Story Points:** ??
  **Delivered:** Dropped 2.2.2 because would be obsolete with zc.buildout

  As a Launchpad developer,\\
  I want all changes I make to LP dependant branches be merged without PQM running tests;\\
  so that changes to LP dependancies can be integrated as fast as changes to Launchpad itself.


<<Anchor(continuous-integration-of-dependencies)>>
=== Continuous Integration of Dependencies ===

  **Story Points:** 3\\
  **Delivered:** 2.2.2

  As the Launchpad release manager,\\
  I want to have automatic regular test run of Launchpad against updated version of our dependencies;\\
  so that we can anticipate problems with newer upstream versions.

  **Notes:**
    * Pre-supposes the buildbot integration system.
    * Will be used for bzr, maybe twisted.


== OpenID Track ==

<<Anchor(login-freshness-openid-extension)>>
=== Login-freshness OpenID extension ===

  **Story Points:** 2\\
  **Delivered:** 2.1.11

  As a Relying Party,\\
  I want to specify the maximum time since the user entered his password on
  the Launchpad OpenID Provider,\\
  so that I can minimize the possibility of somebody just reusing an
  already authenticated session.


<<Anchor(private-team-rpconfig)>>
=== Configure access to private teams in +rpconfig ===

  **Story Points:** 1\\
  **Bug:** [[https://bugs.edge.launchpad.net/launchpad-foundations/+bug/192867|#192867]]

  As a Launchpad administrator,\\
  I want to be able to configure if a trust root can query private \\
  team memberships, so that we can offer the team membership functionality \\
  to arbitrary RP.

User Stories Delivered

API Track

Make API Cacheable

Story Points: 3
Delivered: 2.1.9

As a web service client,
I get a Last-Modified date with each representation I request. I can use that data later on to make conditional GET, PUT, or PATCH requests.
We do this because conditional GET saves bandwidth and often time, and conditional PUT/PATCH prevents clients from overwriting each others' work.

Notes:

  • Modify launchpadlib to use the new headers
  • Store Last-Modified
  • Calculate the headers for objects. No Last-Modified for collections.

Make API Cacheable - client side

Story Points: 3
Delivered: 2.1.9

As a launchpadlib user,
ll GET requests I send have their Last-Modified headers stored for later. Subsequent GET or PATCH requests are made conditional using the stored value.

API customized auto-generated adapter

Story Points: ?
Bug: #294858.

As a Launchpad developer,
I want to be able to customize the IEntry and ICollection adapters generated automatically by the annotations,
so that webservice-specific optimization might be made, while retaining the convenience of the annotated API.

Notes:

No real use cases was found for this feature.

Entry ETag

Story Points: 3
Delivered: 2.1.12 Bug: 273176

As a Launchpad web service client,
I want to see an entry's ETag in the representation of the entry itself;
so I can make conditional requests on objects that weren't obtained through an individual HTTP request.

Export mutators as writable attributes

Story Points: 3
Delivered: 2.1.12

As a developer,
I can annotate one of an interface's methods to be the method invoked when the client makes a PUT or PATCH request that modifies the value of a particular field;
so that the interface to modify most attributes is consistent.

Multi-Hit API

Story Points: Delivered: Dropped during 2.2.1 because of no use cases

As a webservice client,
I want to be able to invoke a particular named operation or setting an attribute to a certain value on a set of objects;
so that mass-change operation can be done efficiently.

Notes:

API: Notification of Server Changes on Update

Story Points: 3
Delivered: 2.2.2

As a Launchpad web service client,
I want that when I do a PATCH or PUT request, the server notifies me when the data I specified was modified by the server;
so that I don't have to make a separate GET request to update my local copy of the object.

Notes:

  • Send updated version on failed conditional get.
  • Always send the representation back.

API: HTML Representation

Story Points: Delivered: 2.2.2

As an AJAX client,
I want to be able to specify in my request that I want an HTML rendition of the object I'm retrieving;
so that I can update the page without having to make a separate request to a special fragment view.

Notes:

  • Use a view lookup to find the rendition.
  • Should be available on update results also.
  • Available on collection and operation.

AJAX Track

YUI Integration

Story Points: 1
Delivered: 2.1.10

As a Launchpad developer, I want to be able to use YUI from a page template, so that I can do cool UI.

Notes:

  • Build/Package YUI files
  • Add to main template, with switch for dev mode.

JavaScript Testing

Story Points: 5
Delivered: 2.1.10

As a Launchpad developer, I want to write a tests for my Javascript, be able to run it locally from the command line; so that I can detect regressions in Javascript code.

Notes:

  • Create YUI 2.5.2 bundle
  • Server the bundle from icing
  • Hook the window fire-up and results reading from test.py or make?
  • Presumed Rhino and Doh can do it (Dojo)

API JS Access

Story Points: 5
Delivered: 2.1.10

As a Launchpad developer, I want to be able to use the Launchpad web service API from JavaScript, so that I can use the standard API to manipulate the content from the UI.

Notes:

  • Somehow call the WebService publisher and Request for different vhosts.
  • Support canonical_url for API objects on other hosts.
  • Add the cookie-based authentication to WebServicePublication.

Initial API JavaScript Library

Story Points: 8
Delivered: 2.1.10

As a Launchpad developer, I want a JS library available that allow me to easily make API call to the Launchpad web service, so that I can access the Launchpad object model without having to write custom XHR request and interpret the resulting JSON.

Notes:

AJAX PATCH

Story Points: 2
Delivered: 2.1.11
Bug: #29645

As a Launchpad programmer,
I want to make the equivalent of a PATCH request through Ajax;
so I can modify an object without having a representation of it.

LAZR-JS Green Flash

Story Points: 2
Delivered: 2.1.12

As a Canonical JS developer,
I want to be able to use a standard green flash animation for
when data has been saved successfully.

Lazr-JS Project Bootstrap

Story Points: 1
Delivered: 2.1.12

As a Launchpad developer,
I want to develop, test, and publish JavaScript widgets in the lazr-js project,
so I can share JS components with the rest of Canonical.

Lazr-JS Reference Widget

Story Points: 5 Delivered: 2.1.12

As a Canonical JS developer,
I want to have a reference implementation of a inline text editing widget;
so that I have an example on how to write widgets.

Lazr-JS Error Widget

Story Points: 5 Delivered: no use cases

As a Launchpad user,
I want AJAX errors to be reported to a single widget;
so that I can navigate and retry errors.

Notes:

  • See beuno's screenshot.
  • Must be available to all widgets.
  • Event-driven.
  • The use cases where such a widget would realy be useful weren't clear. Back to the design board.

Yuitest3

Story Points: 1 Delivered: 2.2.1

As a LAZR-JS developer,
I want the Lazr-JS test suite to use the latest release of YUITest;
so that I can use Mock objects in my unit tests.

Prepopulating AJAX cache

Story Points: 3
Delivered: 2.2.1 Bug: #296456

As a Launchpad programmer,
I want to be able to add objects in the view that will be available from within JavaScript;
so I can present that data or modify it without to have to make an HTTP request.

Inline text editing

Story Points: 3 Delivered: 2.2.2

As a Launchpad developer, I want a way to associate an inline text widget with the rendered element of a content field in view, so that I can easily add inline editing to text fields.

Notes:

{{{ view/bug_title_inlinet_widget bug_title_inline_widget = InlineTextWidget(self.context, 'title') }}}

LAZR Popup

Story Points: Delivered: 2.2.2

As a Launchpad developer,
I want a pop-up widget in which I can add custom code;
so that I have a common look and feel across all pop-up widgets.

Notes:

  • Done during the Lazr-JS February sprint.

Infrastructure Track

Zope 3.4 Upgrade

Story Points: 8
Delivered: 2.1.10

As a Launchpad developer, I want to have zope 3.4 available in my tree, so that I can take advantage of the latest changes in it.

Notes:

EC2 Test Runner

Story Points: 3

As a Launchpad developer,
I want an easy way to run the test suite on EC2;
so that I can submit a branch to PQM with confidence that the test suite will pass.

lazr.config

Story Points: 3 Delivered: 2.1.12

As a python developer,
I want to download lazr.config from the Cheeseshop;
so that I can use it for process configuration in my project.

Notes:

  • Why not brand it as canonical? Find a top-level package name.
  • Missing some documentation.
  • Convert setup tools.
  • Reorganize project directory structure.
  • License? For all of lazr?

5 minutes PQM merge

Story Points: 8
Delivered: 2.1.12

As a Launchpad developer,
I want a continuous integration system that will notify me when a commit I made breaks the test suite;
so that I can merge to PQM without running tests.

Notes:

  • Need to deploy only known good branch.
  • Uses buildbot.

Buildbot EC2 Slave

Story Points: 5
Delivered: 2.2.1

As a LOSA,
I want to deploy buildbot using on-demand slave running on EC2; so that we can host the 5-minutes-PQM infrastructure withing the data center.

Notes:

  • Deploy on devpad running slave on demand in ec2.

Merge EC2 latent slave upstream

Story Points: ?? \ Delivered: 2.2.1

As a Launchpad developer,
I want our ec2 latent slave code merged upstream;
so that it can be maintained by the community.

Separate DB branch

Story Points: 2
Delivered: 2.2.2

As the Launchpad release manager,
I want features requiring DB changes to be landed on a separate branch;
so that we can land DB-related changes earlier in the cycle and also keep edge updated during the whole cycle.

Notes:

  • Pre-supposes the buildbot integration system.
  • Maintain the staging/rollout branch automatically (merging trunk in the DB branch).

5 minutes PQM for dependencies

Story Points: ?? Delivered: Dropped 2.2.2 because would be obsolete with zc.buildout

As a Launchpad developer,
I want all changes I make to LP dependant branches be merged without PQM running tests;
so that changes to LP dependancies can be integrated as fast as changes to Launchpad itself.

Continuous Integration of Dependencies

Story Points: 3
Delivered: 2.2.2

As the Launchpad release manager,
I want to have automatic regular test run of Launchpad against updated version of our dependencies;
so that we can anticipate problems with newer upstream versions.

Notes:

  • Pre-supposes the buildbot integration system.
  • Will be used for bzr, maybe twisted.

OpenID Track

Login-freshness OpenID extension

Story Points: 2
Delivered: 2.1.11

As a Relying Party,
I want to specify the maximum time since the user entered his password on the Launchpad OpenID Provider,
so that I can minimize the possibility of somebody just reusing an already authenticated session.

Configure access to private teams in +rpconfig

Story Points: 1
Bug: #192867

As a Launchpad administrator,
I want to be able to configure if a trust root can query private
team memberships, so that we can offer the team membership functionality
to arbitrary RP.

VersionThreeDotO/Foundations/Delivered (last edited 2009-04-21 13:20:28 by flacoste)