//Licensed under the Apache License, Version 2.0 (the "License");
//you may not use this file except in compliance with the License.
//You may obtain a copy of the License at
//
//http://www.apache.org/licenses/LICENSE-2.0
//
//Unless required by applicable law or agreed to in writing, software
//distributed under the License is distributed on an "AS IS" BASIS,
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//See the License for the specific language governing permissions and
//limitations under the License.
= Incubator Clutch Status
Apache Incubator PMC
:jbake-type: simplepage
:jbake-status: published
:idprefix:
:imagesdir: /images/

[[current]]
Clutch is a tool which gathers details about the projects (podlings) currently in incubation and generates the table below. Clutch also generates an analysis page
for each podling, along with several data files. Its aim is to encourage and nurture podlings; and to provide an overview of the state of establishment of various resources,
and quick access to thems. See link:#definitions[definitions] and link:#notes[notes] below regarding purpose, interpretation, and how-to.

[[clutch]]
== Clutch

include::_includes/clutcht.ad[]

Current Board Report:
include::_includes/clutchmy.ad[]

=== Quick Notes

* The [.care]#orange# items indicate where the podling needs to take more care and attention.
* Anything [.issue]#vermilion# is an issue that the podling should address ASAP. Admittedly nothing can be done about elapsed time.
* The [.cool1]#bluish-green# items indicate success.
* The [.cool2]#yellow# items are okay.
* Click the column header link for link:#definitions[definitions].
* Click cells to go to available related resources.
* Click the podling name in the first column to go to the podling's clutch analysis page, which has deeper and more detailed information.

[cols="2*<,18*^",options="header"]
[%autowidth]
|===
|link:#h-project[Podling]
|link:#h-sponsor[Sponsor]
|link:#h-startdate[A,title=Start Date]
|link:#h-elapseddays[B,title=Elapsed Days]
|link:#h-reportingmonthly[C,title=Reporting Monthly?]
|link:#h-reportinggroup[D,title=Reporting Group]
|link:#h-hasstatusfile[E,title=Has status file]
|link:#h-statusupdatedate[F,title=Status updated]
|link:#h-statusage[G,title=Status Age]
|link:#h-statusupdatecounts[H,title=Status Update Counts]
|link:#h-numbercommitters[I,title=Number of Committers]
|link:#h-numbernewcommitters[J,title=Number of New Committers]
|link:#h-hasrepos[K,title=Has a Code Repository]
|link:#h-hastracker[L,title=Has Issue Tracker]
|link:#h-hasdevlist[M,title=Has dev@ List]
|link:#h-hascommitslist[N,title=Has commits@ list]
|link:#h-haswebsite[O,title=Has Website]
|link:#p_has_a_distribution_area[P,title=Has a Distribution Area]
|link:#h-hassigningkeys[Q,title=Has Release Signing Keys]
|link:#h-hasrelease[R,title=Has a Release in the Distribution Area]

include::_includes/clutchr.ad[]

|link:#h-project[Podling]
|link:#h-sponsor[Sponsor]
|link:#h-startdate[A,title=Start Date]
|link:#h-elapseddays[B,title=Elapsed Days]
|link:#h-reportingmonthly[C,title=Reporting Monthly?]
|link:#h-reportinggroup[D,title=Reporting Group]
|link:#h-hasstatusfile[E,title=Has status file]
|link:#h-statusupdatedate[F,title=Status updated]
|link:#h-statusage[G,title=Status Age]
|link:#h-statusupdatecounts[H,title=Status Update Counts]
|link:#h-numbercommitters[I,title=Number of Committers]
|link:#h-numbernewcommitters[J,title=Number of New Committers]
|link:#h-hasrepos[K,title=Has a Code Repository]
|link:#h-hastracker[L,title=Has Issue Tracker]
|link:#h-hasdevlist[M,title=Has dev@ List]
|link:#h-hascommitslist[N,title=Has commits@ list]
|link:#h-haswebsite[O,title=Has Website]
|link:#p_has_a_distribution_area[P,title=Has a Distribution Area]
|link:#h-hassigningkeys[Q,title=Has Release Signing Keys]
|link:#h-hasrelease[R,title=Has a Release in the Distribution Area]

|===

[[definitions]]
=== Definitions, Notes, and References

The [.care]#orange# and [.issue]#vermilion# items indicate where more care and attention is needed. The following
notes for each column provide definitions and attempt to link directly to the relevant process documentation:

[[h-project]]
==== Podling

The name of each podling is linked to a link:#podling_analysis_page[podling clutch analysis page].
If your podling is in incubation, but is missing from the Clutch table, then it still needs to be added to the [.code]#content/podlings.xml# file.
See the link:/guides/mentor.html#add_to_incubation_summary_file[mentor's guide]. Clutch also generates the link:/projects/[Projects page] from [.code]#content/podlings.xml#.

[[h-sponsor]]
==== Sponsor

Usually the Incubator sponsors podlings. Occasionally Apache Top Level Projects (TLPs) sponsor podlings. The sponsor is chosen on the link:/guides/proposal.html[proposal].
Set the value in the [.code]#content/podlings.xml# entry for the podling.

[[h-startdate]]
==== A: Start Date

This is the date the podling started. Usually this is the date the podling proposal vote passed on the Incubator mailing list.
Set this in the [.code]#content/podlings.xml# entry for the podling.

[[h-elapseddays]]
==== B: Elapsed Days

This is the number of days since the start date. This is color coded according to the normal timeline of a podling.
[.cool3]#<3#, [.cool2]#<12#, [.cool1]#<18#, [.cool3]#<24#, [.cool4]#>24# months. We may adjust these levels to better fit currently-observed cycles.

[[h-reportingmonthly]]
==== C: Reporting Monthly

For the first three months podlings report monthly. If the podling misses a report, it returns to the monthly-reporting requirement until it reports again.

[[h-reportinggroup]]
==== D: Reporting Group

Which months the podling reports: 1 = January, April, July, October; 2 = February, May, August, November; 3 = March, June, September, December.
Note that the report process for a month begins at the end of the prior month. The IPMC chair sends out the reporting schedule on a monthly basis, and reminders to each podling's dev list.

[h-hasstatusfile]]
==== E: Has Status File

Each podling maintains a status file in [.code]#content/projects/(podling).xml# which Clutch converts to a status page.
Your mentor sets up the file and then the podling maintains it. The key part to maintain is the "News" section, where you announce New Committers, PPMC Members, and Releases. For greater detail, please see: 

* link:/guides/mentor.html#initialize_podling_status_page[Initializing Status]
* link:/policy/incubation.html#ongoing_activities[Ongoing Activities]
* link:/guides/website.html#maintaining_status_files[Status Maintenance]
* link:/guides/ppmc.html#project_status_page[Podling Status Page]

Click the link in the cell to view the current status page.

[[h-statusupdatedate]]
==== F: Status Update Date

The date the status page was last updated. Keep the Status Page up to date with frequent news about:

* New Committers
* New PPMC Members
* New Releases
* New Repositories
* New Resources

[[h-statusage]]
==== G: Status Age

Days since the status page was last updated. The text color indicates when a podling is not keeping its status up to date.
[.cool1]#<2#, [.cool2]#<4#, [.cool3]#<9#, [.cool4]#>9# months.

[[h-statusupdatecounts]]
==== H: Status Update Counts

Cumulative number of commits to the podling status file in the previous 2, 4, and 9 months

[[h-numbercommitters]]
==== I: Number of Committers

The number of committers who have been approved to date. Taken from Whimsy via
https://whimsy.apache.org/public/public_ldap_projects.json[public project ldap].
Maintained in Whimsy through https://whimsy.apache.org/roster/ppmc/[the roster pages].
Click the cell to view https://people.apache.org/phonebook.html[the public phone book].

[[h-numbernewcommitters]]
==== J: Number of New Committers

The number of committers added since establishment. This count comes from the Status page "News" section.
See guides on voting in link:/guides/ppmc.html#adding_new_committers[new committers] and link:/guides/ppmc.html#voting_in_a_new_ppmc_member[new ppmc members].

[[h-hasrepos]]
==== K: Has a Code Repository

Indicates whether the podling has created a Gitbox or Subversion code repository. Projects may have multiple Gitbox repositories.
Click the podling name in the first column to view all of the podling's repositories. A podling coming to the ASF may need to request a
link:/guides/mentor.html#git_migrations[migration] or a link:/guides/mentor.html#gitbox_requests[new repository].
The list of Gitbox repositories comes from https://gitbox.apache.org/repositories.json[Gitbox json].

[[h-hastracker]]
==== L: Has Issue Tracker

Indicates whether the podling has an Issue Tracker. If the status file has an issue tracker link and the link is valid, there
is a link to the tracker in the cell.

[[h-hasdevlist]]
==== M: Has a Dev Mailing List

Indicates whether the podling has established a dev email list and archives. This comes from the status page, and Clutch confirms that it matches the usual naming pattern.
If the list is available, the cell has a link to the http://mail-archives.apache.org/mod_mbox/[mailbox archive] podling dev list.

[[h-hascommitslist]]
==== N: Has a Commits Mailing List

Indicates whether the podling has established a commits email list and archives. This comes from the status page, and Clutch confirms that it matches the usual naming pattern.
If the list is available, the cell has a link to the http://mail-archives.apache.org/mod_mbox/[mailbox archive] podling commits list.
Sometimes a podling will start by directing code repository and issue tracker notification emails to their dev list. This will often obscur meaningful conversation.

[[h-haswebsite]]
==== O: Has a Web Site

Podlings should maintain a website so the user community can find out information about the podling and The Apache Software Foundation.
Here is the incubator's link:/guides/sites.html[website guide]. If the website is not provided in the status file, Clutch tries to find it using the usual naming patterns.

If the website exists, the cell provides a link to it. Whimsy provides a periodic scan of podling websites which you can view
https://whimsy.apache.org/pods/[here]. The clutch process uses https://whimsy.apache.org/public/pods-scan.json[json] data to add notes about website issues
to the podling's clutch analysis page under "Errata".

[[p_has_a_distribution_area]]
==== P: Has a Distribution Area

Indicates whether the podling has a directory in the incubator's https://dist.apache.org/repos/dist/release/incubator/[release distribution directory].
If this exists, the cell provides a link.

[[h-hassigningkeys]]
==== Q: Has Release Signing Keys

Indicates whether the podling has a PGP "[.code]#Signing KEYS#" file in its distribution area. If this is present, the cell provides a link.

[[h-hasrelease]]
==== R: Has a Release in the Distribution Area

Indicates whether the podling has a release in their distribution area. Podlings must comply with Apache release and release distribution policies as modified by the Incubator.

* link:/guides/releasemanagement.html[Incubator Release Management]
* http://www.apache.org/dev/#releases[Software Product Releases]
* http://www.apache.org/legal/release-policy.html[Apache Release Policy (legal)]
* https://www.apache.org/dev/release-distribution.html[Apache Release Distribution Policy (infra)]

If there is a podling release, the cell provides a link to the podling's clutch analysis page's release section.

[[h-graduate]]
==== Graduating

Once the Board has approved the podling's graduation resolution, update your podling metadata in the [.code]#content/podlings.xml#
file as you progress through graduation. Complete the tasks listed in the documentation, such as a final tidy of the status page.
See https://infra.apache.org/infra-contact#requesting-graduation[Infrastructure steps for graduation].

[[h-retire]]
==== Retirement

Once the Incubator PMC has agreed to a podling's retirement, update the podling metadata and tidy the status page. If the podling is continuing development
elsewhere, make sure to provide the new location. When this occurs chances are someone on the IPMC will handle these duties ad hoc.

include::_includes/clutcho1.ad[]

[[steps]]
== Assist with Incubation Steps

Clutch helps us all follow the process from the "Acceptance" phase onwards.
Any committer to a podling can help with these steps. Don't leave it all to your mentors, although there are some steps that only they can do.

[[mentors]]
== Mentors

This list comes from the link:/projects/[Projects in incubation] summary table.
The link:/incubation/Roles_and_Responsibilities.html#Mentor[Mentors] are ASF members or individuals recognized by the IPMC who have chosen to assist these projects.
The best way to find mentors for a new project is during your Discuss and Proposal phases on the general@ mail list.

include::_includes/clutchm.ad[]

[[notes]]
== Notes

Any Incubator committer can run 'clutch'. In the top-level of the SVN repos [.code]#incubator/public/trunk# SVN, do: '[.code]#./clutch2.sh#' to
re-generate the link:#data[data files] and Asciidoctor files for the clutch. This is all a part of the normal build in GIT: https://github.com/apache/incubator[Incubator Git].
See the Readme.

Clutch reads the source file for the link:/projects/[projects currently in incubation] table (i.e. [.code]#content/podlings.xml#),
ensures that each new project has an entry, and adds some more attributes. Clutch then gathers some data from each project's Status page and
validates that certain resources are established and steps have been achieved.

Clutch output includes link:#data[data files] 

[[podling_analysis_page]]
=== Podling Clutch Analysis Page

The clutch analysis fills the data included on this page and creates an analysis for each podling that can be linked to from the podling name in the clutch table.

==== Description

* The podling description from [.code]#content/podlings.xml#
* The podling start date.
* The date of the last update of project/status.xml.
* The reporting cycle.
* The number of committers and ppmc members. Indication if these are equal.
* Mentor list including apache ids.

==== News

Copies the news from the podling status page

==== Resources

Listing of various podling resources

===== Project Website

Link to podling's public website

===== Mailing lists

* Developer mailing list archive
* Commits mailing list archive

===== Issue Tracker

Link to issue tracker

===== Wiki

Link to wiki

===== Repositories

* Detailed list of gitbox repos from infra's ground truth for the podling.
* Link to any subversion repository.
* For each gitbox repos:
** Gitbox link
** Github link
** Description
** Number of commits
** Date of last commit

==== Releases

Information about the podling's release, harvested from the distribution area's svn repository.

===== Current

Current releases:

* Link to the signing key, if it exists.
* Link to instructions on how to verify a release.
* Release list is suppressed if there are no signing keys
* For each release:
** Download link using [.code]#closer.lua#
** Signature link
** Hash link
** Size of the download file
** Date that the release was added to the distribution area.
** User who moved the release.
** Revision in the svn repository.

==== Errata

Issues which may require further work.

* Errata has a list of potential issues identified for the podling.
* Critical issues are in bold.
* Links to pages on how to resolve the issue.
* Link to the https://whimsy.apache.org/pods/project[whimsy podling site scan]/

[[data]]
== Data files

Data files are also generated so that other tools can easily re-use the  metadata for the set of projects currently in incubation: 

* link:/clutch/clutch.txt[[.code]#clutch.txt#] - list of projects, one per line. Comma-separated values (CSV).
* [.code]#clutch.pkl# - a Python "pickle" file with various attributes (it is in the top-level of SVN incubator/public/trunk).
* One text file for each Reporting group listing the dev mail address of the podlings due to report in that group.
  (See link:/clutch/report_due_1.txt[[.code]#report_due_1.txt#],  link:/clutch/report_due_2.txt[[.code]#report_due_2.txt#], and
   link:/clutch/report_due_3.txt[[.code]#report_due_3.txt#]) 
  These are used by the IPMC to send monthly report alert reminders.
* link:/clutch/podlings_graduated.txt[[.code]#podlings_graduated.txt#] - list of graduated podlings, one per line with start and end dates.
* link:/clutch/podlings_retired.txt[[.code]#podlings_retired.txt#] - list of retired podlings, one per line with start and end dates.

[[other]]
== Other Issues

Occasionally there are other issues, usually regarding podlings not cleaning up after their "graduation".

include::_includes/clutcho2.ad[]

[[notes-2]]
== Further Notes

The http://en.wikipedia.org/wiki/Clutch_(eggs)[clutch] is the set of eggs which have been laid. The mother hen (our Incubator PMC)
needs to continually gather them, to ensure that none have rolled from the nest or moved to the outside, being forgotten or becoming cold.
Clutch also means to grasp eagerly.

So please interpret this table and the detailed pages from the point-of-view of encouragement and nurture.

=== Origin

The nest was becoming full. Some podlings were forgotten, rolled into dark corners. We created a new tool, "clutch", to assist with oversight of all podlings
(gmane link is now missing). The clutch started 2008-10-19. (missing gmane link) There was prior list discussion. Also see
https://issues.apache.org/jira/browse/INCUBATOR-78[INCUBATOR-78]

=== Colour Scheme

The colours for the table were specifically chosen to take into account colour-blindness and general accessibility.
See the email discussion that led to this: http://thread.gmane.org/gmane.comp.apache.incubator.general/20788/focus=20810[Re: Clutch color coding].
2008-12-04 http://s.apache.org/clutch_colour?action=display[http://s.apache.org/clutch_colour] and see some testing
http://people.apache.org/~crossley/cud/test.html[notes] and demonstrations.

Thanks again to: "Color Universal Design (CUD) - How to make figures and presentations that are friendly to Colorblind people."
Masataka Okabe and Kei Ito. (http://jfly.iam.u-tokyo.ac.jp/color/[http://jfly.iam.u-tokyo.ac.jp/color/]

