##
## $Rev$ $Date$
##

Exit Criteria
(put an X next to item when it is complete):

Copyrights & Licensing

X -- Do all the software in the codebase has its copyright assigned to The
     Apache Software Foundation?
     Yes

X -- Do All the software in the codebase, are licensed (or multi-licensed) under the
     Apache licence?
     Yes - code converted to ASL2.0 on 2004/02/25 (thanks Gianny)

X -- Do all the software in the codebase,are compliant with the
     Specifications set by Java Community Process?(Wherever applicable)
     * This criteria has been superceded by the Exit Milestone below

Distribution rights

X -- For all code included with the distribution that is not under the
     Apache license, do we have the right to combine with Apache-licensed
     code and redistribute?
     Yes

X -- Is all source code distributed by the project covered by one or more
     of the following approved licenses:  Apache, BSD, Artistic, MIT/X,
     MIT/W3C, MPL 1.1, or something with essentially the same terms?
     Yes

Naming

X -- Has the final name for the project decided?
2003/12/21 vote on keeping the name Geronimo
      +1 jboynes, dblevins, adc, gstein, jdillon, djencks, dims, chirino, dain, janb, gregwilkins, bsnyder, rmonson, jules, geir
      -1 jstrachan
      Decision made on 2003/12/24 to keep the name Geronimo

X -- Does the codebase,mailing list,bug tracker contain the right name of the project?
     (In case,if the name geronimo is changed)
     Yes

Infrastructure

X -- CVS modules created and committers added to avail file?
     Yes:       http://cvs.apache.org/viewcvs.cgi/incubator-geronimo/

X -- Are the developer,commit and user mailing lists set up and archived?
     Developer: http://nagoya.apache.org/eyebrowse/SummarizeList?listId=140
     CVS:       http://nagoya.apache.org/eyebrowse/SummarizeList?listId=141
     User:      to be set up when a distribution is made

X -- Bug tracking system enabled?
     Yes:       http://nagoya.apache.org/jira/secure/BrowseProject.jspa?id=10220

X -- wiki based documentation site enabled?
     Yes:       http://wiki.apache.org/geronimo

X -- Has the project migrated to our infrastructure?
     Yes

Committers:

X -- Have all of the active long-term volunteers been identified
     and acknowledged as committers on the project?
     Yes

X -- Have all the commiters signed the CLA?
     Yes, with the exception of Simone Bordet. He is listed as a committer
     but does not have commit access.

X -- Do they have accounts on cvs.apache.org?
     Yes

X -- Are there three or more independent committers?
     Yes
     2/10/04 voted to add Jacek Laskowski as committer
             +1 jboynes djencks dims ammulder adc dain janb geir gdamour bsynder dblevins chirino

Collaborative Development:

X -- Are project decisions being made in public by the committers?
     Yes

X -- Are the decision-making guidelines published and agreed to by
     all of the committers?
     Yes

  -- Does the documentation site has enough information on the architecure,design decisions and
     modules?


  -- Has the community decided on a policy for the composition of its 'steering committee'?


X -- Has the community,the graduation/new PMC of the project to which the codebase and community
     will move at the end of incubation (if any), and the Incubator PMC, decided the
     expected time frame of stay in incubator?
     Yes - when the Exit Milestone below has been achieved

X -- Has the community adopted the Apache voting rules and is otherwise following the Apache
     guidelines?
     Yes

Exit Milestone:
  -- "Run Petstore from a distribution (on a machine with Zero Source code) by following some
     easy instruction steps" - a little fuzzy, but whether this is met is to be decided by vote

organisational acceptance:

X  -- Has the board accepted moving to a existing/new PMC?


Incubator sign-off:

X -- Has the Incubator decided that the project has accomplished all
    of the above tasks?
