Title: Apache Board report for Apache Aries, January 2018
Notice:    Licensed to the Apache Software Foundation (ASF) under one
           or more contributor license agreements.  See the NOTICE file
           distributed with this work for additional information
           regarding copyright ownership.  The ASF licenses this file
           to you 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.

# April 2018 Board report

## Description: 
- Apache Aries delivers a set of pluggable Java components enabling an enterprise OSGi application programming model.
   
## Issues: 
 - No issues to report.
   
## Activity: 
 - As a community we made 5 releases in the last reporting period around updates to Aries Blueprint with a mix of bug fixes and functional enhancements.
   
## Health report: 
 - Mailing list activity up slightly on the last reporting period. Stable.
   
## PMC changes: 
   
 - Currently 38 PMC members. 
 - No new PMC members added in the last 3 months 
 - Last PMC addition was Dominik Przybysz on Tue May 30 2017 
   
## Committer base changes: 
   
 - Currently 55 committers. 
 - No new committers added in the last 3 months 
 - Last committer addition was Tom De Wolf at Wed May 03 2017 
   
## Releases: 
   
- Aries Blueprint Parser (blueprint-parser) 1.5.0 on 2018-02-14
- Aries Blueprint Core (blueprint-core) 1.9.0 on 2018-02-14
- Aries Blueprint CM (blueprint-cm) 1.2.0 on 2018-02-14
- Aries Blueprint Spring (blueprint-spring) 0.6.0 on 2018-02-14
- Aries Blueprint Spring Extender (blueprint-spring-extender) 0.4.0 on 2018-02-14
   
## /dist/ errors: 195 
 - In progress - all are old releases but some are still the most recent. We've requested the signer to extend their key expiration and will review the list to see which can be archived.

## JIRA activity: 
   
 - 24 JIRA tickets created in the last 3 months 
 - 72 JIRA tickets closed/resolved in the last 3 months 
