## Description:
The mission of JSPWiki is the creation and maintenance of software related to
Leading open source WikiWiki engine, feature-rich and built around standard 
JEE components (Java, servlets, JSP).

## Project Status:
Current project status: Ongoing, with low activity.
Issues for the board: There are no issues requiring board attention.

## Membership Data:
Apache JSPWiki was founded 2013-07-17 (10 years ago)
There are currently 15 committers and 9 PMC members in this project.
The Committer-to-PMC ratio is 5:3.

Community changes, past quarter:
- Arturo Bernal was added to the PMC on 2023-06-21
- Arturo Bernal was added as committer on 2023-06-21

## Project Activity:
Except from the last weeks, it has been a quiet quarter, with almost no 
activity:

* There's being some work on the refactor, referenced on last report, to 
benefit from virtual threads under JDK-21, but it is not complete yet. 
* A small bug detected while our public wiki being attacked was fixed.
* We've began to publish SBOMs alongside our main artifacts.
* Some dependencies and plugins have been upgraded.

We still have to release 2.12.2, and then publish a CVE already fixed on 
master, which should be done this quarter.

## Community Health:
Work on latest master shows commits from 1 commiter, done on the same git push.

As noted above, on Eastern Week we were target of an automated attack, which
tried to explote vulnerabilities inside JSPWiki, through every single form 
available. Thankfully, all the attack vectors were covered on previous 
vulnerability reports, so nothing serious did happen, other than wiki 
defacement which was manually fixed.

As a result of this, we've documented on our SVN private area the setup of
the VM that hosts our public wiki, so any PMC can know how to operate it;
we're also temporarily not allowing new accounts on our public wiki, until
we put manual approval of accounts, and we've asked for volunteers to help
mantaining our public wiki content, having received one request off-list to
it.

One new user appeared on our user ML, has opened several JIRA issues and has 
provided a PR for one of them, which should be reviewed and hopefully merged
sooner than later.

No questions unanswered on MLs, although they've had very little traffic.
