This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new e195b91857 Update scripts
e195b91857 is described below
commit e195b918576fcea79b91658a0ff42bd18b7c7919
Author: James Bognar <[email protected]>
AuthorDate: Sun Dec 28 16:39:09 2025 -0500
Update scripts
---
docs/pages/topics/23.00.00.Scripts.md | 6 +-
docs/pages/topics/23.02.00.ScriptPush.md | 27 +-
docs/pages/topics/23.03.00.ScriptRelease.md | 29 +-
scripts/README-apply-eclipse-prefs.md | 120 --------
scripts/README-build-and-push.md | 205 -------------
scripts/README-build-docs.md | 231 --------------
scripts/README-check-fluent-setter-overrides.md | 260 ----------------
scripts/README-check-topic-links.md | 145 ---------
scripts/README-cleanup-whitespace.md | 77 -----
scripts/README-create-mvn-site.md | 231 --------------
scripts/README-current-release.md | 55 ----
scripts/README-maven-version.md | 53 ----
scripts/README-prompt-pgp-passphrase.md | 45 ---
scripts/README-release-docs-stage.md | 71 -----
scripts/README-release-docs.md | 67 -----
scripts/README-release.md | 134 ---------
scripts/README-revert-staged.md | 46 ---
scripts/README-revert-unstaged.md | 50 ----
scripts/README-start-docusaurus.md | 159 ----------
scripts/README-start-examples-rest-jetty.md | 287 ------------------
scripts/README-start-examples-rest-springboot.md | 366 -----------------------
scripts/README-test.md | 108 -------
22 files changed, 20 insertions(+), 2752 deletions(-)
diff --git a/docs/pages/topics/23.00.00.Scripts.md
b/docs/pages/topics/23.00.00.Scripts.md
index 900a282ba3..b92b3a3375 100644
--- a/docs/pages/topics/23.00.00.Scripts.md
+++ b/docs/pages/topics/23.00.00.Scripts.md
@@ -59,7 +59,7 @@ All scripts share the following characteristics:
- **No External Dependencies** - All scripts use only Python standard library
modules
- **Cross-Platform** - Work on macOS, Linux, and Windows
- **Error Handling** - Provide clear error messages and exit codes
-- **Documentation** - Each script has a corresponding README file in
`scripts/README-*.md`
+- **Documentation** - Each script has detailed documentation in the Docusaurus
topics
## Getting Help
@@ -69,7 +69,7 @@ Each script supports a `--help` flag to display usage
information:
python3 scripts/<script-name>.py --help
```
-For detailed documentation, see the README files in the `scripts/` directory
or the individual script topic pages.
+For detailed documentation, see the individual script topic pages linked above.
## Requirements
@@ -79,5 +79,5 @@ Most scripts require:
- **Git** (for version control scripts)
- **Node.js and npm** (for documentation scripts)
-Specific requirements are documented in each script's README and topic page.
+Specific requirements are documented in each script's topic page.
diff --git a/docs/pages/topics/23.02.00.ScriptPush.md
b/docs/pages/topics/23.02.00.ScriptPush.md
index a6dd5dc253..954c75d09c 100644
--- a/docs/pages/topics/23.02.00.ScriptPush.md
+++ b/docs/pages/topics/23.02.00.ScriptPush.md
@@ -9,11 +9,10 @@ slug: ScriptPush
The script executes the following steps in order:
-1. **Run Tests** - Executes `mvn test` to ensure all tests pass
+1. **Run Tests** - Executes `mvn test` to ensure all tests pass (optional with
`--skip-tests`)
2. **Build and Install** - Runs `mvn clean package install` to build the
project
-3. **Generate Javadocs** - Executes `mvn javadoc:javadoc` to create API
documentation
-4. **Git Commit** - Stages all changes and commits with the provided message
-5. **Git Push** - Pushes the commit to the remote repository
+3. **Git Commit** - Stages all changes and commits with the provided message
+4. **Git Push** - Pushes the commit to the remote repository
If any step fails, the script stops immediately and reports the failure.
@@ -32,18 +31,6 @@ python3 scripts/push.py "Your commit message here"
python3 scripts/push.py "Updated README" --skip-tests
```
-### Skip Javadoc Generation
-
-```bash
-python3 scripts/push.py "Minor code fix" --skip-javadoc
-```
-
-### Skip Both Tests and Javadoc
-
-```bash
-python3 scripts/push.py "Quick formatting fix" --skip-tests --skip-javadoc
-```
-
### Dry Run (see what would happen without actually doing it)
```bash
@@ -59,7 +46,6 @@ python3 scripts/push.py "Testing changes" --dry-run
### Optional Flags
- `--skip-tests` - Skip running tests (useful for documentation-only changes)
-- `--skip-javadoc` - Skip Javadoc generation
- `--dry-run` - Show what would be done without actually executing commands
## When to Use
@@ -71,15 +57,10 @@ python3 scripts/push.py "Testing changes" --dry-run
- Refactoring code
### Use `--skip-tests` when:
-- Only updating documentation (README, Javadocs, markdown files)
+- Only updating documentation (README, markdown files)
- Making cosmetic changes (formatting, comments)
- Tests have already been run successfully in another context
-### Use `--skip-javadoc` when:
-- Making changes that don't affect public APIs
-- Quick bug fixes
-- Internal code refactoring
-
### Use `--dry-run` when:
- Testing the script itself
- Verifying what steps will be executed
diff --git a/docs/pages/topics/23.03.00.ScriptRelease.md
b/docs/pages/topics/23.03.00.ScriptRelease.md
index a4ee76a32e..cc330e8620 100644
--- a/docs/pages/topics/23.03.00.ScriptRelease.md
+++ b/docs/pages/topics/23.03.00.ScriptRelease.md
@@ -17,23 +17,22 @@ The script performs the following steps:
6. **Clone Juneau** - Clones the repository to staging directory
7. **Configure Git** - Sets up git user and email
8. **Run Clean Verify** - Builds and verifies the project
-9. **Run Javadoc Aggregate** - Generates aggregate javadocs
-10. **Create Test Workspace** - Creates a test workspace
-11. **Run Deploy** - Deploys to Maven staging repository
-12. **Run Release Prepare** - Prepares the Maven release
-13. **Run Git Diff** - Shows changes made by release:prepare
-14. **Run Release Perform** - Performs the Maven release
-15. **Create Binary Artifacts** - Downloads and processes source/binary
artifacts
-16. **Verify Distribution** - Verifies files on Apache distribution site
+9. **Run Deploy** - Deploys to Maven staging repository
+10. **Run Release Prepare** - Prepares the Maven release
+11. **Run Release Perform** - Performs the Maven release
+12. **Create Binary Artifacts** - Downloads and processes source/binary
artifacts
+13. **Verify Distribution** - Verifies files on Apache distribution site
## Usage
### Start a New Release
```bash
-python3 scripts/release.py --rc 1
+python3 scripts/release.py
```
+The script will prompt you for the release candidate number.
+
### Resume from a Step
```bash
@@ -49,7 +48,7 @@ python3 scripts/release.py --list-steps
### Skip Specific Steps
```bash
-python3 scripts/release.py --rc 1 --skip-step clean_maven_repo
+python3 scripts/release.py --skip-step clean_maven_repo
```
### Resume from Last Checkpoint
@@ -60,9 +59,6 @@ python3 scripts/release.py --resume
## Command-Line Options
-### Required (for new releases)
-- `--rc RC_NUMBER` - Release candidate number (e.g., `--rc 1` for RC1)
-
### Optional
- `--start-step STEP_NAME` - Start execution from the specified step
- `--list-steps` - List all available steps and exit
@@ -76,7 +72,7 @@ The script prompts for and sets the following environment
variables:
- `X_VERSION` - Current release version (detected from pom.xml)
- `X_NEXT_VERSION` - Next version (calculated)
- `X_RELEASE` - Full release name (e.g., "juneau-9.2.0-RC1")
-- `X_RELEASE_CANDIDATE` - Release candidate number
+- `X_RELEASE_CANDIDATE` - Release candidate number (prompted for at start)
- `X_STAGING` - Staging directory path
- `X_USERNAME` - Apache username
- `X_EMAIL` - Apache email
@@ -98,7 +94,7 @@ This allows the script to provide intelligent defaults on
subsequent runs.
The script supports checkpoint/resume functionality:
- State is saved to `~/.juneau-release-state.json`
- You can resume from any step using `--resume` or `--start-step`
-- The `--rc` parameter is optional when resuming (extracted from state/history)
+- The release candidate number is prompted for at start, or extracted from
state/history when resuming
## Vote Email Generation
@@ -123,8 +119,9 @@ The email is printed to the console.
## Notes
-- The script automatically excludes `juneau-docs` from the source release zip
+- The script automatically excludes `docs` from the source release zip (via
maven-source-plugin configuration)
- Source and binary artifacts are downloaded from Maven staging repository
- Distribution verification checks for expected files on Apache distribution
site
- The script uses `current-release.py` and `maven-version.py` for version
detection
+- Javadoc generation, test workspace creation, and git diff steps have been
removed from the release process
diff --git a/scripts/README-apply-eclipse-prefs.md
b/scripts/README-apply-eclipse-prefs.md
deleted file mode 100644
index 07454edaac..0000000000
--- a/scripts/README-apply-eclipse-prefs.md
+++ /dev/null
@@ -1,120 +0,0 @@
-# Apply Eclipse Preferences Script
-
-## Overview
-
-`apply-eclipse-prefs.py` applies Eclipse IDE preference files to all Juneau
project modules, ensuring consistent code formatting and IDE configuration
across all developers.
-
-## What It Does
-
-The script copies Eclipse JDT (Java Development Tools) preferences from the
`eclipse-preferences` directory to each module's `.settings` folder. There are
two sets of preferences:
-
-1. **source-prefs** - Applied to main source modules (28 modules)
- - Code formatting rules
- - Code cleanup rules
- - Compiler settings
- - Save actions
-
-2. **test-prefs** - Applied to test modules (2 modules)
- - Same as source-prefs but optimized for test code
- - Applied to: `juneau-utest` and `*-ftest` modules
-
-## Usage
-
-### Apply preferences to all modules
-
-```bash
-cd /Users/james.bognar/git/juneau
-python3 scripts/apply-eclipse-prefs.py
-```
-
-### Apply preferences from a different directory
-
-```bash
-python3 scripts/apply-eclipse-prefs.py /path/to/juneau
-```
-
-## Preference Files
-
-The script copies these files to each module's `.settings` directory:
-
-- `org.eclipse.jdt.core.prefs` - Compiler and formatter settings
-- `org.eclipse.jdt.ui.prefs` - UI preferences (save actions, code templates,
etc.)
-
-## Eclipse Preferences Location
-
-All Eclipse preference files are stored in:
-```
-scripts/eclipse-preferences/
-├── source-prefs/
-│ ├── org.eclipse.jdt.core.prefs
-│ └── org.eclipse.jdt.ui.prefs
-├── test-prefs/
-│ ├── org.eclipse.jdt.core.prefs
-│ └── org.eclipse.jdt.ui.prefs
-├── juneau-cleanup-rules.xml
-├── juneau-code-templates.xml
-├── juneau-formatter-rules.xml
-├── juneau-organize-imports.importorder
-├── user-dictionary.txt
-└── user-dictionary.xml
-```
-
-## Output
-
-The script provides detailed progress and a summary:
-
-```
-Applying Eclipse preferences to Juneau modules in:
/Users/james.bognar/git/juneau
-
-Applying source preferences...
-✓ Preferences applied to juneau-bean/juneau-bean-atom
-✓ Preferences applied to juneau-bean/juneau-bean-common
-...
-
-Applying test preferences...
-✓ Preferences applied to juneau-utest
-✓ Preferences applied to juneau-examples/juneau-examples-rest-jetty-ftest
-
-============================================================
-Summary:
- Total projects: 30
- Successfully updated: 30
- Failed: 0
-============================================================
-```
-
-## When to Use
-
-Run this script when:
-- Setting up a new development environment
-- After cloning the Juneau repository
-- After Eclipse preference files are updated in the repository
-- To sync your IDE settings with the project standards
-
-## Modules Covered
-
-### Source Modules (28)
-- All juneau-bean modules
-- All juneau-core modules
-- All juneau-examples modules
-- All juneau-microservice modules
-- All juneau-rest modules
-- All juneau-sc modules
-
-### Test Modules (2)
-- juneau-utest
-- juneau-examples-rest-jetty-ftest
-
-## Requirements
-
-- Python 3.6 or higher
-- No external dependencies (uses only standard library)
-
-## Replacing the Old Shell Script
-
-This Python script replaces `juneau-apply-prefs.sh` with:
-- Updated module list matching current project structure
-- Better error handling and reporting
-- Cross-platform compatibility (works on Windows, macOS, Linux)
-- Clearer output and progress indication
-
diff --git a/scripts/README-build-and-push.md b/scripts/README-build-and-push.md
deleted file mode 100644
index dc57cc3665..0000000000
--- a/scripts/README-build-and-push.md
+++ /dev/null
@@ -1,205 +0,0 @@
-# Build and Push Script
-
-## Overview
-
-`push.py` automates the complete build, test, and deployment workflow for
Juneau, ensuring code quality before pushing changes to the remote repository.
-
-## What It Does
-
-The script executes the following steps in order:
-
-1. **Run Tests** - Executes `mvn test` to ensure all tests pass
-2. **Build and Install** - Runs `mvn clean package install` to build the
project
-3. **Generate Javadocs** - Executes `mvn javadoc:javadoc` to create API
documentation
-4. **Git Commit** - Stages all changes and commits with the provided message
-5. **Git Push** - Pushes the commit to the remote repository
-
-If any step fails, the script stops immediately and reports the failure.
-
-## Usage
-
-### Basic Usage
-
-```bash
-cd /Users/james.bognar/git/juneau
-python3 scripts/push.py "Your commit message here"
-```
-
-### Skip Tests (for documentation-only changes)
-
-```bash
-python3 scripts/push.py "Updated README" --skip-tests
-```
-
-### Skip Javadoc Generation
-
-```bash
-python3 scripts/push.py "Minor code fix" --skip-javadoc
-```
-
-### Skip Both Tests and Javadoc
-
-```bash
-python3 scripts/push.py "Quick formatting fix" --skip-tests --skip-javadoc
-```
-
-### Dry Run (see what would happen without actually doing it)
-
-```bash
-python3 scripts/push.py "Testing changes" --dry-run
-```
-
-## Command-Line Options
-
-### Required Arguments
-
-- `message` - The Git commit message (must be provided)
-
-### Optional Flags
-
-- `--skip-tests` - Skip running tests (useful for documentation-only changes)
-- `--skip-javadoc` - Skip Javadoc generation
-- `--dry-run` - Show what would be done without actually executing commands
-
-## Examples
-
-### Example 1: Full Build and Push
-
-```bash
-python3 scripts/push.py "Fixed bug in RestClient connection handling"
-```
-
-Output:
-```
-======================================================================
-🚀 Juneau Build and Push Script
-======================================================================
-Working directory: /Users/james.bognar/git/juneau
-Commit message: 'Fixed bug in RestClient connection handling'
-======================================================================
-
-🧪 Step 1: Running tests...
-Running: mvn test
-✅ Step 1: Running tests... - SUCCESS
-
-🏗️ Step 2: Building and installing project...
-Running: mvn clean package install
-✅ Step 2: Building and installing project... - SUCCESS
-
-📚 Step 3: Generating Javadocs...
-Running: mvn javadoc:javadoc
-✅ Step 3: Generating Javadocs... - SUCCESS
-
-📝 Step 4: Committing changes to Git...
- 4.1: Staging all changes...
-Running: git add .
-✅ 4.1: Staging all changes... - SUCCESS
- 4.2: Creating commit...
-Running: git commit -m Fixed bug in RestClient connection handling
-✅ 4.2: Creating commit... - SUCCESS
-✅ Step 4: Git commit completed.
-
-🚀 Step 5: Pushing changes to remote repository...
-Running: git push
-✅ Step 5: Pushing changes to remote repository... - SUCCESS
-
-======================================================================
-🎉 All operations completed successfully!
-📦 Commit message: 'Fixed bug in RestClient connection handling'
-======================================================================
-```
-
-### Example 2: Documentation Changes (Skip Tests)
-
-```bash
-python3 scripts/push.py "Updated REST client documentation" --skip-tests
-```
-
-### Example 3: Formatting Changes (Skip Tests and Javadoc)
-
-```bash
-python3 scripts/push.py "Fixed code formatting in BeanContext" --skip-tests
--skip-javadoc
-```
-
-### Example 4: Dry Run
-
-```bash
-python3 scripts/push.py "Testing my changes" --dry-run
-```
-
-Output:
-```
-🔍 DRY RUN MODE - No actual changes will be made
-
-Steps that would be executed:
- 1. Run tests: mvn test
- 2. Build and install: mvn clean package install
- 3. Generate Javadocs: mvn javadoc:javadoc
- 4. Commit changes: git add . && git commit -m "Testing my changes"
- 5. Push to remote: git push
-
-Dry run complete. Use without --dry-run to execute.
-```
-
-## Exit Codes
-
-- `0` - Success, all operations completed
-- `1` - Failure at any step
-
-## Error Handling
-
-The script uses a fail-fast approach:
-- If tests fail, the build is aborted immediately
-- If the build fails, Javadoc generation is skipped
-- If Javadoc generation fails, the commit is not created
-- If the commit fails, the push is not attempted
-- If the push fails, you'll have a local commit that needs to be pushed
manually
-
-## Safety Features
-
-1. **No Changes Detection** - If there are no changes to commit, the script
skips commit and push steps
-2. **Fail-Fast** - Stops immediately on any error to prevent incomplete
deployments
-3. **Clear Output** - Each step is clearly marked with emojis and status
indicators
-4. **Dry Run Mode** - Preview what will happen without making any changes
-
-## When to Use
-
-### Use the full script when:
-- Making code changes that affect functionality
-- Adding new features
-- Fixing bugs
-- Refactoring code
-
-### Use `--skip-tests` when:
-- Only updating documentation (README, Javadocs, markdown files)
-- Making cosmetic changes (formatting, comments)
-- Tests have already been run successfully in another context
-
-### Use `--skip-javadoc` when:
-- Making changes that don't affect public APIs
-- Quick bug fixes
-- Internal code refactoring
-
-### Use `--dry-run` when:
-- Testing the script itself
-- Verifying what steps will be executed
-- Learning how the script works
-
-## Requirements
-
-- Python 3.6 or higher
-- Maven (mvn command must be in PATH)
-- Git (git command must be in PATH)
-- No external Python dependencies (uses only standard library)
-
-## Replacing the Old Shell Script
-
-This Python script replaces `build-and-push.sh` with:
-- Better error handling and reporting
-- Optional step skipping (--skip-tests, --skip-javadoc)
-- Dry run mode for testing
-- More detailed output with step numbering
-- Cross-platform compatibility (Windows, macOS, Linux)
-- Argument parsing with help documentation
-- Check for uncommitted changes before attempting commit
-
diff --git a/scripts/README-build-docs.md b/scripts/README-build-docs.md
deleted file mode 100644
index e71bae3495..0000000000
--- a/scripts/README-build-docs.md
+++ /dev/null
@@ -1,231 +0,0 @@
-# Build Documentation Script
-
-## Overview
-
-`build-docs.py` builds the complete Apache Juneau documentation, including
both Docusaurus documentation and Maven-generated Javadocs. This script
replicates the documentation generation steps from the GitHub Actions workflow,
allowing you to build and test the documentation locally.
-
-## What It Does
-
-The script performs the following steps:
-
-1. **Installs npm dependencies** - Runs `npm ci` in the `docs` directory
-2. **Compiles Java modules** - Runs `mvn clean install -DskipTests` to build
all modules
-3. **Generates Maven site** - Runs `mvn site -DskipTests` to generate the
Maven project site (includes aggregate javadocs)
-4. **Copies current javadocs** - Copies generated javadocs to
`docs/static/javadocs/<current-release>/`
-5. **Updates javadocs index** - Updates `releases.json` with version
information
-6. **Copies Maven site** - Copies the generated site to `docs/static/site/`
(Docusaurus will copy to build)
-7. **Builds Docusaurus** - Runs `npm run build` to generate the static
Docusaurus site (copies static/ to build/)
-10. **Copies .asf.yaml** - Copies the ASF configuration file to the build
directory
-11. **Verifies apidocs** - Checks that the javadocs were successfully generated
-12. **Checks topic links** - Validates all documentation links
-
-## Usage
-
-### Build all documentation
-
-```bash
-cd /path/to/juneau
-python3 scripts/build-docs.py
-```
-
-This will build both the Docusaurus documentation and the Maven site with
javadocs.
-
-### Skip specific steps
-
-You can skip individual steps if you only need to rebuild part of the
documentation:
-
-```bash
-# Skip npm steps (useful if you only changed Java code)
-python3 scripts/build-docs.py --skip-npm
-
-# Skip Maven steps (useful if you only changed Docusaurus docs)
-python3 scripts/build-docs.py --skip-maven
-
-# Skip copying step (useful for testing without updating build directory)
-python3 scripts/build-docs.py --skip-copy
-
-# Build for staging (sets SITE_URL for staging environment)
-python3 scripts/build-docs.py --staging
-
-# Combine options
-python3 scripts/build-docs.py --skip-npm --skip-copy
-```
-
-## Command-Line Options
-
-- `--skip-npm` - Skip npm install and Docusaurus build
-- `--skip-maven` - Skip Maven compilation and site generation
-- `--skip-copy` - Skip copying Maven site to static directory
-- `--staging` - Build for staging (sets SITE_URL to juneau.staged.apache.org)
-
-## Prerequisites
-
-The script requires the following tools to be installed and available in your
PATH:
-
-- **Node.js** (version 18 or higher recommended)
-- **npm** (comes with Node.js)
-- **Maven** (version 3.6 or higher)
-- **Java** (version 17 or higher)
-
-The script will check for these prerequisites and exit with an error message
if any are missing.
-
-## Output
-
-After successful execution, the documentation will be available in:
-
-- **Docusaurus docs**: `docs/build/`
-- **Maven site**: `docs/build/site/`
-- **Javadocs**: `docs/build/javadocs/` (versioned, copied from
static/javadocs) and `docs/build/site/apidocs/` (current)
-- **Javadocs index**: `docs/build/javadocs/index.html` (dynamically loads from
`releases.json`)
-
-The script will also verify that the javadocs were generated and report the
number of HTML files found.
-
-## Example Output
-
-```
-Project root: /path/to/juneau
-Docs directory: /path/to/juneau/docs
-✓ All required tools are available
-
-=== Installing npm dependencies ===
-Running: npm ci
- (in directory: /path/to/juneau/docs)
-
-=== Building Docusaurus ===
-Running: npm run build
- (in directory: /path/to/juneau/docs)
-
-=== Compiling Java modules ===
-Running: mvn clean compile -DskipTests
-
-=== Generating Maven site ===
-Running: mvn site -DskipTests
-
-=== Copying current javadocs to versioned folder ===
-
-=== Verifying apidocs generation ===
-✓ Javadocs found in /path/to/juneau/target/site/apidocs
-✓ Found 1234 HTML files in apidocs
-
-=== Copying Maven site to build directory ===
-Copying /path/to/juneau/target/site to /path/to/juneau/docs/build/site
-Copying /path/to/juneau/.asf.yaml to /path/to/juneau/docs/build
-
-=== Documentation build complete ===
-Documentation is available in: /path/to/juneau/docs/build
-```
-
-## Exit Codes
-
-- `0` - Success, all documentation built successfully
-- `1` - Error occurred during build (command failed, missing prerequisites,
etc.)
-
-## When to Use
-
-Run this script:
-
-- **Before committing documentation changes** - Verify that your changes build
correctly
-- **When testing documentation locally** - Build the complete documentation
site for local review
-- **After updating Java code** - Regenerate javadocs to reflect API changes
-- **After updating Docusaurus content** - Rebuild the static site to see your
changes
-- **To debug CI/CD issues** - Reproduce the documentation build process locally
-
-## Common Use Cases
-
-### Quick rebuild after Java changes
-
-If you only changed Java code and want to regenerate javadocs:
-
-```bash
-python3 scripts/build-docs.py --skip-npm
-```
-
-### Quick rebuild after Docusaurus changes
-
-If you only changed Docusaurus markdown files:
-
-```bash
-python3 scripts/build-docs.py --skip-maven
-```
-
-### Test without updating build directory
-
-If you want to test the build process without modifying the build directory:
-
-```bash
-python3 scripts/build-docs.py --skip-copy
-```
-
-The Maven site will still be generated in `target/site/`, but won't be copied
to `docs/static/site/`.
-
-## Troubleshooting
-
-### Missing tools
-
-If you get an error about missing tools:
-
-```
-ERROR: Missing required tools: Node.js, npm
-Please install the missing tools and try again.
-```
-
-Install the missing tools and ensure they're in your PATH.
-
-### npm install fails
-
-If `npm ci` fails, try:
-
-```bash
-cd docs
-rm -rf node_modules package-lock.json
-npm install
-```
-
-Then run the script again.
-
-### Maven build fails
-
-If Maven commands fail, check:
-
-1. Java version: `java -version` should show Java 17 or higher
-2. Maven version: `mvn -version` should show Maven 3.6 or higher
-3. Project compilation: Try `mvn clean compile` manually to see detailed error
messages
-
-### Javadocs not generated
-
-If the script reports that apidocs were not found:
-
-1. Check if `mvn javadoc:aggregate` runs successfully when called directly
-2. Verify that all modules have `Automatic-Module-Name` in their MANIFEST.MF
-3. Check the Maven output for errors or warnings
-
-## Requirements
-
-- Python 3.6 or higher
-- No external Python dependencies (uses only standard library)
-- Node.js 18+ and npm
-- Maven 3.6+ and Java 17+
-
-## Notes
-
-- The script automatically skips tests (`-DskipTests`) to speed up the build
-- All commands are run from the project root directory
-- The script will exit immediately if any command fails (unless using
`--skip-*` options)
-- The build directory (`docs/build/`) will be created if it doesn't exist
-- Existing site contents will be replaced when copying
-
-## Build Order
-
-The script copies Maven site to `static/site/` and updates javadocs in
`static/javadocs/` **before** building Docusaurus. Docusaurus automatically
copies everything from the `static/` directory to the `build/` directory during
the build process, so the files are available when Docusaurus processes links,
preventing broken link warnings.
-
-## Integration with CI/CD
-
-This script is used by the documentation release scripts:
-- `release-docs-stage.py` - Calls `build-docs.py --staging` to build for
staging
-- `release-docs.py` - Promotes already-built documentation from staging to
production
-
-## Related Scripts
-
-- `release-docs-stage.py` - Deploys built documentation to `asf-staging` branch
-- `release-docs.py` - Promotes documentation from `asf-staging` to `asf-site`
branch
-
diff --git a/scripts/README-check-fluent-setter-overrides.md
b/scripts/README-check-fluent-setter-overrides.md
deleted file mode 100644
index a1ac7d6c5f..0000000000
--- a/scripts/README-check-fluent-setter-overrides.md
+++ /dev/null
@@ -1,260 +0,0 @@
-# Check Fluent Setter Overrides Script
-
-## Purpose
-
-This script scans the Juneau codebase to find missing fluent setter overrides
in subclasses.
-
-## Problem
-
-Juneau uses fluent-style setters extensively for method chaining:
-
-```java
-public class X {
- public X setY(Y y) {
- this.y = y;
- return this;
- }
-}
-```
-
-When a class extends another class with fluent setters, it should override
those setters to return the correct subclass type:
-
-```java
-public class X2 extends X {
- @Override
- public X2 setY(Y y) {
- super.setY(y);
- return this;
- }
-}
-```
-
-Without these overrides, method chaining breaks:
-
-```java
-// Without override - compiler error!
-X2 obj = new X2()
- .setY(y) // Returns X, not X2
- .setX2SpecificMethod(); // Error: X doesn't have this method
-
-// With proper override - works!
-X2 obj = new X2()
- .setY(y) // Returns X2
- .setX2SpecificMethod(); // OK
-```
-
-## Usage
-
-### Basic Usage
-
-Run from the Juneau root directory:
-
-```bash
-python3 scripts/check-fluent-setter-overrides.py
-```
-
-Or run directly (script is executable):
-
-```bash
-./scripts/check-fluent-setter-overrides.py
-```
-
-### Output
-
-The script will:
-1. Scan all Java files in the source tree
-2. Identify classes and their inheritance relationships
-3. Find fluent setter methods (methods that return `this`)
-4. Check if subclasses properly override these setters
-5. Report any missing overrides grouped by class
-
-Example output:
-
-```
-Juneau Fluent Setter Override Checker
-==================================================
-
-Scanning for Java files...
-Found 2847 Java files
-
-Extracting class information...
-Found 1523 classes
-Found 3421 fluent setter methods
-
-Building class hierarchy...
-
-Checking for missing fluent setter overrides...
-
-MISSING OVERRIDES (23 found):
-==================================================
-
-Class: RestClientBuilder
- File:
juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
- Missing 5 override(s):
- - debug(Enablement)
- From parent: BeanContextBuilder
- - locale(Locale)
- From parent: BeanContextBuilder
- - mediaType(MediaType)
- From parent: BeanContextBuilder
- - timeZone(TimeZone)
- From parent: BeanContextBuilder
- - beansRequireDefaultConstructor()
- From parent: BeanContextBuilder
-
-Class: HtmlDocSerializerBuilder
- File:
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
- Missing 3 override(s):
- - addBeanTypes()
- From parent: HtmlSerializerBuilder
- - detectRecursions()
- From parent: SerializerBuilder
- - ignoreRecursions()
- From parent: SerializerBuilder
-
-==================================================
-Total missing overrides: 23
-
-Note: These are informational and do not fail the build.
-Consider adding these overrides to maintain fluent API consistency.
-```
-
-## What the Script Checks
-
-The script identifies fluent setters by looking for:
-- Public methods that return the class type (e.g., `public X setFoo(...)`)
-- Methods that contain `return this;` in their body
-- Methods in parent classes that should be overridden in subclasses
-
-### Excluded Methods
-
-The script automatically skips certain methods that are less critical for type
safety:
-
-#### Methods with `@Beanp` annotation
-
-**As of Juneau 9.2.0**, methods annotated with `@Beanp` can now be safely
overridden in subclasses. The `@Beanp` annotation is automatically inherited by
the overridden method, ensuring consistent bean property names across the
inheritance hierarchy.
-
-**Before 9.2.0** (for reference):
-- Overriding `@Beanp` methods caused duplicate bean property definitions
-- This resulted in `SerializeException: ELEMENTS and ELEMENT properties found
on the same bean`
-- `@DoNotOverride` was required to prevent these errors
-
-**After 9.2.0**:
-- `@Beanp` annotations are properly inherited via
`BeanMeta.inheritParentAnnotations()`
-- Subclasses can override these methods to change return types for fluent
chaining
-- No re-annotation required on the overridden method
-
-Example that now works correctly:
-
-```java
-// Parent class
-public class HtmlElementContainer {
- @Beanp("c")
- public HtmlElementContainer setChildren(List<Object> children) {
- this.children = children;
- return this;
- }
-}
-
-// Subclass - override works correctly (annotation inherited)
-public class Figure extends HtmlElementContainer {
- @Override
- public Figure setChildren(List<Object> children) {
- super.setChildren(children);
- return this; // Return type is Figure, not HtmlElementContainer
- }
-}
-```
-
-**The script still checks for `@Beanp`** to skip these methods from the
missing override report, as they are less critical for type safety (the
annotation inheritance handles correctness automatically).
-
-## What to Do with Results
-
-When the script reports missing overrides:
-
-1. **Review the findings** - Not all reported methods may need overrides
-2. **Add missing overrides** - For methods that should be overridden:
-
-```java
-@Override
-public SubClass methodName(ParamType param) {
- super.methodName(param);
- return this;
-}
-```
-
-3. **Consider fluent API design** - Ensure method chaining works correctly
across the inheritance hierarchy
-
-## Limitations
-
-- The script uses regex-based parsing (not a full Java parser)
-- May not catch all edge cases (complex generics, etc.)
-- Reports are informational only - manual review is recommended
-- Does not validate that overrides are implemented correctly
-- Only processes top-level public classes (inner classes are excluded by
design)
-
-## Recent Improvements
-
-### Version 2.0 - Package-Aware Parent Class Matching
-
-**Problem**: The script was reporting massive false positives (164 missing
overrides) when multiple classes with the same simple name existed in different
packages.
-
-**Example**:
-- `org.apache.juneau.svl.Var` (SVL variable class)
-- `org.apache.juneau.bean.html5.Var` (HTML `<var>` element)
-
-When checking `SimpleVar extends Var`, the script would match **both** Var
classes and report that `SimpleVar` needed to override HTML attribute methods
from the HTML5 Var class (which was incorrect).
-
-**Solution**: Added package-aware filtering in `check_missing_overrides()`
that:
-- Prefers parent classes from the same package as the child class
-- Falls back to all matching classes only when package matching fails
-- Reduced false positives from 164 to 25
-
-### Version 2.1 - Parameter Name Normalization
-
-**Problem**: The script was matching method signatures by full parameter
string **including parameter names**:
-- Parent: `append(Object value)`
-- Child: `append(Object text)`
-
-These were treated as different methods, causing false reports even when
proper overrides existed.
-
-**Solution**: Added `normalize_params()` function that:
-- Extracts only parameter **types**, ignoring parameter names
-- Handles annotations (e.g., `@NotNull`)
-- Supports complex types (e.g., `Map<String,Object>`)
-- Reduced false positives from 25 to 2
-
-### Version 2.2 - Inner Class Filtering and Scope Detection
-
-**Problem**: The remaining 2 false positives were caused by methods in inner
classes being incorrectly associated with outer classes:
-- `DebugEnablement.Builder.build()` was incorrectly reported as a fluent
setter on `DebugEnablement`
-- The script searched the **entire file** for methods, not just the specific
class body
-
-**Solution**: Added two improvements:
-1. **Inner class filtering**: Skip indented class declarations (inner classes)
as they're usually implementation details
-2. **Class body scope detection**: Only search for methods within the
boundaries of each top-level class
-
-**Implementation**:
-- Check if class declaration starts with whitespace (indicates inner class)
-- Calculate class body boundaries (from opening brace to next top-level class
or EOF)
-- Search for methods only within the specific class body
-
-**Results**:
-- Filtered out 370 inner classes
-- Reduced fluent setter methods from 15,934 to 10,517 (eliminated ~5,400 inner
class methods)
-- **Reduced false positives from 2 to 0** ✅
-
-**Final Result**: From an initial count of 230 reported issues, all
improvements reduced this to **zero false positives**, making the script highly
accurate and production-ready.
-
-## Integration
-
-This script can be run:
-- Manually during development
-- As part of code review process
-- In CI/CD pipelines (informational only)
-- Before releases to ensure API consistency
-
-## Exit Code
-
-The script always exits with code 0 (success) to avoid failing builds. Results
are informational only.
-
diff --git a/scripts/README-check-topic-links.md
b/scripts/README-check-topic-links.md
deleted file mode 100644
index 2ba70d6e33..0000000000
--- a/scripts/README-check-topic-links.md
+++ /dev/null
@@ -1,145 +0,0 @@
-# Check Topic Links Script
-
-## Overview
-
-`check-topic-links.py` validates that all documentation topic links in the
Juneau source code are correct and point to valid topics with matching titles.
-
-## What It Does
-
-The script performs three main operations:
-
-1. **Extracts Topic Information** - Scans `/docs/pages/topics` for all
markdown files and extracts:
- - Slug names from the frontmatter
- - Page titles from the frontmatter
-
-2. **Finds Topic Links** - Scans the entire Juneau source tree for links in
the format:
- ```
- https://juneau.apache.org/docs/topics/SLUG">TITLE</a>
- ```
-
-3. **Validates Links** - Reports any issues:
- - **Title mismatches**: Link title doesn't match the actual topic title
- - **Unknown slugs**: Link points to a topic that doesn't exist
-
-## Usage
-
-### Check all topic links
-
-```bash
-cd /Users/james.bognar/git/juneau
-python3 scripts/check-topic-links.py
-```
-
-The script will automatically:
-- Scan `/docs/pages/topics` for topic definitions
-- Scan the entire Juneau source tree for topic links
-- Report any issues found
-
-## File Types Scanned
-
-The script checks the following file types:
-- `.java` - Java source files
-- `.md` - Markdown files
-- `.xml` - XML configuration files
-- `.properties` - Properties files
-- `.txt` - Text files
-- `.adoc` - AsciiDoc files
-- `.rst` - reStructuredText files
-
-## Directories Skipped
-
-The script automatically skips:
-- Hidden directories (starting with `.`)
-- `target/` - Maven build output
-- `node_modules/` - Node.js dependencies
-- `build/` - Build directories
-- `dist/` - Distribution directories
-
-## Output Examples
-
-### Success (No Issues)
-
-```
-Juneau Topic Link Checker
-==================================================
-
-Extracting topic information from docs...
-Found topic: BeanSubTypes -> Bean Subtypes
-Found topic: Guards -> Guards
-...
-
-Found 247 topics
-
-Scanning source tree for topic links...
-Found 89 topic links
-
-Checking links for issues...
-
-✓ All topic links are correct!
-```
-
-### Title Mismatch
-
-```
-WARNINGS (2 found):
-==================================================
-TITLE MISMATCH:
- File: juneau-rest/juneau-rest-server/src/main/java/RestContext.java:142
- Slug: Guards
- Expected title: 'Guards'
- Actual title: 'Guard Classes'
- Link: https://juneau.apache.org/docs/topics/Guards">Guard Classes</a>
-
-UNKNOWN SLUG:
- File: juneau-examples/src/main/java/Example.java:56
- Slug: OldTopic
- Title: 'Removed Topic'
- Link: https://juneau.apache.org/docs/topics/OldTopic">Removed Topic</a>
-
-Total warnings: 2
-```
-
-## Exit Codes
-
-- `0` - Success, no issues found
-- `1` - Warnings/errors found
-
-## When to Use
-
-Run this script:
-- Before committing changes that add or modify documentation links
-- After renaming or reorganizing documentation topics
-- As part of CI/CD validation
-- When updating topic titles in markdown files
-- To audit all documentation links in the codebase
-
-## Common Issues Fixed
-
-### Title Mismatch
-When a link uses an outdated or incorrect title for a topic:
-```java
-// Wrong
-<a href="https://juneau.apache.org/docs/topics/Guards">Guard Classes</a>
-
-// Correct
-<a href="https://juneau.apache.org/docs/topics/Guards">Guards</a>
-```
-
-### Unknown Slug
-When a link points to a topic that no longer exists:
-- Remove the link, or
-- Update the slug to point to a valid topic, or
-- Create the missing topic markdown file
-
-## Requirements
-
-- Python 3.6 or higher
-- No external dependencies (uses only standard library)
-
-## Notes
-
-- The script uses the topic's frontmatter (title and slug) as the source of
truth
-- Links are expected to follow the exact format:
`https://juneau.apache.org/docs/topics/SLUG">TITLE</a>`
-- The script is case-sensitive for both slugs and titles
-- Report files generated by this script (`topic-link-check-*.txt`) are
automatically skipped during scanning
-
diff --git a/scripts/README-cleanup-whitespace.md
b/scripts/README-cleanup-whitespace.md
deleted file mode 100644
index bcd480c67d..0000000000
--- a/scripts/README-cleanup-whitespace.md
+++ /dev/null
@@ -1,77 +0,0 @@
-# Whitespace Cleanup Script
-
-## Overview
-
-`cleanup-whitespace.py` is a Python script that cleans up common whitespace
inconsistencies in Java files.
-
-## What It Does
-
-The script performs the following cleanup operations:
-
-1. **Removes consecutive blank lines** - Maximum of 1 blank line allowed
between code sections
-2. **Removes trailing whitespace** - Strips whitespace from the end of all
lines
-3. **Removes blank lines before final closing brace** - Ensures files end
cleanly with `}`
-4. **Ensures proper file endings** - Files end with `}` with no trailing
newline
-
-## Usage
-
-### Clean the entire Juneau codebase
-
-```bash
-cd /Users/james.bognar/git/juneau
-python3 scripts/cleanup-whitespace.py
-```
-
-### Clean a specific directory
-
-```bash
-python3 scripts/cleanup-whitespace.py juneau-core/juneau-marshall
-```
-
-### Clean a specific module
-
-```bash
-python3 scripts/cleanup-whitespace.py juneau-utest/src/test/java
-```
-
-## Output
-
-The script will:
-- Scan for all `.java` files (excluding `target/` and `.git/` directories)
-- Report each file that was modified
-- Provide a summary of total files scanned and modified
-
-Example output:
-```
-Scanning for Java files in: /Users/james.bognar/git/juneau
-Found 1247 Java files
-✓ Cleaned:
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
-✓ Cleaned:
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
-...
-
-Summary:
- Total files scanned: 1247
- Files modified: 342
- Files unchanged: 905
-```
-
-## Safety
-
-- The script only modifies `.java` files
-- Original file encoding (UTF-8) is preserved
-- If an error occurs processing a file, it is logged but doesn't stop the
script
-- It's recommended to commit your changes before running the script so you can
review the diff
-
-## Testing
-
-After running the script, verify everything still compiles and tests pass:
-
-```bash
-mvn clean test
-```
-
-## Requirements
-
-- Python 3.6 or higher
-- No external dependencies (uses only standard library)
-
diff --git a/scripts/README-create-mvn-site.md
b/scripts/README-create-mvn-site.md
deleted file mode 100644
index 7419560ddb..0000000000
--- a/scripts/README-create-mvn-site.md
+++ /dev/null
@@ -1,231 +0,0 @@
-# Create Maven Site Script
-
-## Overview
-
-`create-mvn-site.py` generates the Maven site with Javadocs and copies it to
the Docusaurus static directory for local testing and broken link validation.
-
-## What It Does
-
-The script performs these operations:
-
-1. **Detects Version** - Automatically gets the project version from POM
-2. **Cleans Old Site** - Removes existing `target/site` directory
-3. **Generates Site** - Runs `mvn clean compile site` to create the Maven site
-4. **Copies to Docusaurus** - Moves site to `/docs/static/site/`
-5. **Logs Output** - Creates `create-mvn-site.log` in project root
-
-## Usage
-
-### Generate Maven Site
-
-```bash
-cd /Users/james.bognar/git/juneau
-python3 scripts/create-mvn-site.py
-```
-
-The generated site will be available at `http://localhost:3000/site/` (after
starting Docusaurus).
-
-## Output Example
-
-```
-Creating Maven site with javadocs for local testing...
-Working from: /Users/james.bognar/git/juneau
-Detected project version: 9.2.0-SNAPSHOT
-
-Generating maven site for root project...
-Removing existing site directory: /Users/james.bognar/git/juneau/target/site
-
-Running Maven site generation...
-[INFO] Scanning for projects...
-[INFO] Building Apache Juneau 9.2.0-SNAPSHOT
-...
-[INFO] BUILD SUCCESS
-
-Found Maven site in: /Users/james.bognar/git/juneau/target/site
-
-Setting up local testing directory for Docusaurus...
-Removing existing static site directory:
/Users/james.bognar/git/juneau/docs/static/site
-
-Copying entire Maven site to Docusaurus static directory...
-Copying directory: apidocs/
-Copying directory: css/
-Copying file: index.html
-...
-
-*******************************************************************************
-***** SUCCESS *****************************************************************
-*******************************************************************************
-Maven site has been generated and copied successfully!
-Complete Maven site is now available in:
/Users/james.bognar/git/juneau/docs/static/site/
-This includes javadocs, project reports, and all other site content.
-You can now access it at: http://localhost:3000/site/
-Ready for broken link testing in your Docusaurus documentation!
-```
-
-## What Gets Generated
-
-The Maven site includes:
-
-- **Javadocs** - `/site/apidocs/` - Complete API documentation
-- **Project Information** - Summary, team, dependencies
-- **Project Reports** - Test reports, code coverage (if configured)
-- **Site Navigation** - Full Maven site structure
-- **CSS/Assets** - All styling and resources
-
-## When to Use
-
-Use this script when:
-- **Testing Documentation Links** - Validate links between docs and Javadocs
-- **Preparing for Release** - Preview the complete site structure
-- **Broken Link Testing** - Find and fix broken links before deployment
-- **Local Development** - Test Javadoc generation without full build
-
-## Typical Workflow
-
-### Test Documentation Links
-
-```bash
-# Step 1: Generate Maven site
-python3 scripts/create-mvn-site.py
-
-# Step 2: Start Docusaurus
-python3 scripts/start-docusaurus.py
-
-# Step 3: Test in browser
-# Visit http://localhost:3000
-# Click through documentation
-# Verify all links to /site/apidocs/ work correctly
-
-# Step 4: Check for broken links
-# Use browser tools or link checkers
-```
-
-### Verify Javadoc Generation
-
-```bash
-# Generate site
-python3 scripts/create-mvn-site.py
-
-# Check for errors in log
-less create-mvn-site.log
-
-# Browse Javadocs
-open http://localhost:3000/site/apidocs/index.html
-```
-
-## Output Location
-
-After running the script:
-
-```
-docs/
-└── static/
- └── site/ # Maven site (temporary, for testing)
- ├── apidocs/ # Javadocs
- ├── css/ # Styles
- ├── images/ # Images
- ├── index.html # Site home
- └── ... # Other Maven site files
-```
-
-**Note:** The `/static/site/` directory is temporary and typically not
committed to Git. It's for local testing only.
-
-## Log File
-
-The script creates a log file:
`/Users/james.bognar/git/juneau/create-mvn-site.log`
-
-This contains the complete Maven output for debugging.
-
-**Check the log if:**
-- Site generation fails
-- Javadoc warnings occur
-- You need detailed build information
-
-```bash
-# View the log
-cat create-mvn-site.log
-
-# Search for errors
-grep -i error create-mvn-site.log
-
-# Search for warnings
-grep -i warning create-mvn-site.log
-```
-
-## Troubleshooting
-
-### Maven Site Generation Fails
-
-**Check Java version:**
-```bash
-java -version
-mvn -version
-```
-
-**Ensure project compiles:**
-```bash
-mvn clean compile
-```
-
-**Check the log file:**
-```bash
-tail -50 create-mvn-site.log
-```
-
-### Out of Memory Errors
-
-Increase Maven heap size:
-
-```bash
-export MAVEN_OPTS="-Xmx4g"
-python3 scripts/create-mvn-site.py
-```
-
-### Javadoc Warnings/Errors
-
-Javadoc generation is strict. Common issues:
-- Missing `@param` or `@return` tags
-- Invalid HTML in Javadoc comments
-- Broken `@link` references
-
-Check the log for specific Javadoc errors.
-
-### Site Not Appearing in Browser
-
-1. Make sure Docusaurus is running: `python3 scripts/start-docusaurus.py`
-2. Clear browser cache
-3. Check that files exist: `ls -la docs/static/site/`
-4. Visit directly: `http://localhost:3000/site/index.html`
-
-## Requirements
-
-- **Python**: 3.6 or higher
-- **Maven**: 3.6 or higher
-- **Java**: JDK 11 or higher (for Javadoc generation)
-- **Project Built**: Run `mvn install` at least once
-
-## Replacing the Old Script
-
-This Python script replaces `/docs/create-mvn-site.sh` with:
-- ✅ No dependency on `juneau-env.sh`
-- ✅ Automatic version detection from POM
-- ✅ Better error handling
-- ✅ Real-time output streaming
-- ✅ Cross-platform compatibility
-- ✅ Clearer progress messages
-
-## Performance Notes
-
-- **Time**: Generation typically takes 5-15 minutes depending on system
-- **Disk Space**: Maven site requires ~100-200 MB
-- **CPU/Memory**: Maven uses significant resources during generation
-- **First Run**: Slower if Maven needs to download dependencies
-
-## Notes
-
-- The script automatically detects the Juneau root directory
-- Old site directories are cleaned before generation
-- Output is both displayed and logged to file
-- The generated site is a snapshot - not kept in sync with code changes
-- Run this script again after making significant code/documentation changes
-
diff --git a/scripts/README-current-release.md
b/scripts/README-current-release.md
deleted file mode 100644
index 6f584e9abe..0000000000
--- a/scripts/README-current-release.md
+++ /dev/null
@@ -1,55 +0,0 @@
-# Current Release Version Script
-
-## Overview
-
-`current-release.py` extracts the current release version from the root
`pom.xml` file, removing the `-SNAPSHOT` suffix if present.
-
-## What It Does
-
-The script:
-1. Tries to use Maven's `help:evaluate` to get the version (most reliable)
-2. Falls back to parsing the `pom.xml` XML directly if Maven fails
-3. Removes the `-SNAPSHOT` suffix if present
-4. Prints the version number to stdout
-
-## Usage
-
-```bash
-python3 scripts/current-release.py
-```
-
-## Output
-
-Prints the version number (e.g., "9.2.0") to stdout.
-
-### Example
-
-```bash
-$ python3 scripts/current-release.py
-9.2.0
-```
-
-## Exit Codes
-
-- `0` - Success, version printed to stdout
-- `1` - Error, could not determine version
-
-## Use Cases
-
-This script is typically used by other scripts (like `release.py`) to:
-- Determine the current release version
-- Calculate the next version
-- Generate version-specific file names
-
-## Requirements
-
-- Python 3.6 or higher
-- Maven (optional, for primary method)
-- No external Python dependencies (uses only standard library)
-
-## Notes
-
-- The script prefers Maven's evaluation method as it's more reliable
-- Falls back to XML parsing if Maven is not available or fails
-- Handles Maven POM namespaces correctly
-
diff --git a/scripts/README-maven-version.md b/scripts/README-maven-version.md
deleted file mode 100644
index 4e91efc05f..0000000000
--- a/scripts/README-maven-version.md
+++ /dev/null
@@ -1,53 +0,0 @@
-# Maven Version Script
-
-## Overview
-
-`maven-version.py` extracts the Maven major version number from the output of
`mvn -version`.
-
-## What It Does
-
-The script:
-1. Runs `mvn -version`
-2. Parses the output to extract the major version number
-3. Prints the major version (e.g., "3") to stdout
-
-## Usage
-
-```bash
-python3 scripts/maven-version.py
-```
-
-## Output
-
-Prints the major version number (e.g., "3") to stdout.
-
-### Example
-
-```bash
-$ python3 scripts/maven-version.py
-3
-```
-
-## Exit Codes
-
-- `0` - Success, version printed to stdout
-- `1` - Error, could not determine Maven version or Maven not found
-
-## Use Cases
-
-This script is typically used by other scripts (like `release.py`) to:
-- Check if Maven meets minimum version requirements
-- Verify Maven installation
-
-## Requirements
-
-- Python 3.6 or higher
-- Maven (mvn command must be in PATH)
-- No external Python dependencies (uses only standard library)
-
-## Notes
-
-- The script looks for patterns like "Apache Maven 3.9.5" or "Maven 3.9.5"
-- Returns only the major version number (e.g., "3" from "3.9.5")
-- Exits with error if Maven is not found or version cannot be parsed
-
diff --git a/scripts/README-prompt-pgp-passphrase.md
b/scripts/README-prompt-pgp-passphrase.md
deleted file mode 100644
index 798bc67a77..0000000000
--- a/scripts/README-prompt-pgp-passphrase.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# PGP Passphrase Prompt Script
-
-## Overview
-
-`prompt-pgp-passphrase.py` makes a dummy PGP call to prompt for the user's
passphrase early in the execution. This ensures the user is prompted at the
beginning rather than waiting until signing is needed near the end of a process.
-
-## What It Does
-
-The script:
-1. Creates a temporary dummy file
-2. Attempts to sign it with GPG (which prompts for passphrase)
-3. Cleans up the temporary files
-4. Returns success even if GPG is not available (to avoid breaking workflows)
-
-## Usage
-
-```bash
-python3 scripts/prompt-pgp-passphrase.py
-```
-
-## When to Use
-
-This script is typically called by other scripts (like `push.py` and
`release.py`) at the beginning of their execution to:
-- Prompt for PGP passphrase early
-- Avoid delays later when signing is actually needed
-- Provide a better user experience
-
-## Exit Codes
-
-- Always returns `0` (success) to avoid breaking workflows
-- Prints warnings if GPG is not available or if the prompt times out
-
-## Requirements
-
-- Python 3.6 or higher
-- GPG (optional, script handles gracefully if not available)
-- No external Python dependencies (uses only standard library)
-
-## Notes
-
-- The script is designed to fail gracefully
-- If GPG is not found, it prints a warning and continues
-- If the prompt times out, it's treated as okay (user may not need signing)
-- The dummy file and signature are automatically cleaned up
-
diff --git a/scripts/README-release-docs-stage.md
b/scripts/README-release-docs-stage.md
deleted file mode 100644
index 2f69f50c97..0000000000
--- a/scripts/README-release-docs-stage.md
+++ /dev/null
@@ -1,71 +0,0 @@
-# Release Documentation to Staging Script
-
-## Overview
-
-`release-docs-stage.py` builds the documentation and deploys it to the
`asf-staging` branch, making it available on the staging website.
-
-## What It Does
-
-The script:
-1. Runs `build-docs.py` with `--staging` flag to build documentation for
staging
-2. Clones the repository to a temporary directory
-3. Checks out the `asf-staging` branch (or creates it if it doesn't exist)
-4. Removes all existing files (except `.git`)
-5. Copies the built documentation from `docs/build` to the temp directory
-6. Adds and commits the changes
-7. Pushes to the remote `asf-staging` branch
-
-## Usage
-
-### Deploy to Staging
-
-```bash
-python3 scripts/release-docs-stage.py
-```
-
-### Custom Commit Message
-
-```bash
-python3 scripts/release-docs-stage.py --commit-message "Updated API
documentation"
-```
-
-### Test Without Pushing
-
-```bash
-python3 scripts/release-docs-stage.py --no-push
-```
-
-## Command-Line Options
-
-- `--no-push` - Build and commit but don't push to remote
-- `--commit-message MESSAGE` - Custom commit message (default: "Deploy
documentation staging")
-
-## Prerequisites
-
-- Python 3.6 or higher
-- Git (git command must be in PATH)
-- All prerequisites for `build-docs.py` (Node.js, npm, Maven, Java)
-- Write access to the remote repository
-
-## Exit Codes
-
-- `0` - Success
-- `1` - Error occurred
-
-## Notes
-
-- The script uses a temporary directory for git operations
-- The temp directory is automatically cleaned up after successful push
-- If `--no-push` is used, the temp directory is not cleaned up (for manual
inspection)
-- The script sets `SITE_URL` environment variable to
`https://juneau.staged.apache.org` when building
-- A success sound is played when the script completes successfully
-
-## Workflow
-
-This script is typically used as part of the documentation release workflow:
-
-1. Make documentation changes
-2. Run `release-docs-stage.py` to deploy to staging
-3. Review the staging site
-4. Run `release-docs.py` to promote to production
-
diff --git a/scripts/README-release-docs.md b/scripts/README-release-docs.md
deleted file mode 100644
index 4168c162ea..0000000000
--- a/scripts/README-release-docs.md
+++ /dev/null
@@ -1,67 +0,0 @@
-# Promote Documentation to Production Script
-
-## Overview
-
-`release-docs.py` promotes documentation from the `asf-staging` branch to the
`asf-site` branch, making it live on the production website.
-
-## What It Does
-
-The script:
-1. Clones the repository to a temporary directory
-2. Fetches the `asf-staging` branch
-3. Switches to a detached HEAD at `origin/asf-staging`
-4. Force pushes to the `asf-site` branch
-
-## Usage
-
-### Promote to Production
-
-```bash
-python3 scripts/release-docs.py
-```
-
-**⚠️ WARNING:** This will make the documentation live on the production
website.
-
-### Test Without Pushing
-
-```bash
-python3 scripts/release-docs.py --no-push
-```
-
-## Command-Line Options
-
-- `--no-push` - Perform all steps except the final git push
-- `--commit-message` - Not used (kept for consistency with
release-docs-stage.py)
-
-## Prerequisites
-
-- Python 3.6 or higher
-- Git (git command must be in PATH)
-- Write access to the remote repository
-
-## Exit Codes
-
-- `0` - Success
-- `1` - Error occurred
-
-## Notes
-
-- The script uses a temporary directory for git operations
-- The temp directory is automatically cleaned up after successful push
-- If `--no-push` is used, the temp directory is not cleaned up (for manual
inspection)
-- A success sound is played when the script completes successfully
-- This script does NOT build documentation - it only promotes what's already
in `asf-staging`
-
-## Workflow
-
-This script is typically used as the final step in the documentation release
workflow:
-
-1. Make documentation changes
-2. Run `release-docs-stage.py` to deploy to staging
-3. Review the staging site at `https://juneau.staged.apache.org`
-4. Run `release-docs.py` to promote to production at
`https://juneau.apache.org`
-
-## Safety
-
-The script includes a warning message before promoting to production to ensure
you understand the impact.
-
diff --git a/scripts/README-release.md b/scripts/README-release.md
deleted file mode 100644
index 0182411695..0000000000
--- a/scripts/README-release.md
+++ /dev/null
@@ -1,134 +0,0 @@
-# Release Script
-
-## Overview
-
-`release.py` automates the complete release process for Apache Juneau,
including prerequisite checks, building, testing, Maven release, binary
artifact creation, and SVN distribution upload.
-
-## What It Does
-
-The script performs the following steps:
-
-1. **Check Prerequisites** - Verifies required tools are available
-2. **Check Java Version** - Automatically detects and verifies Java 17+
-3. **Check Maven Version** - Automatically detects and verifies Maven 3+
-4. **Clean Maven Repository** - Cleans local Maven repo (only on first run for
a version)
-5. **Make Git Folder** - Creates staging directory
-6. **Clone Juneau** - Clones the repository to staging directory
-7. **Configure Git** - Sets up git user and email
-8. **Run Clean Verify** - Builds and verifies the project
-9. **Run Javadoc Aggregate** - Generates aggregate javadocs
-10. **Create Test Workspace** - Creates a test workspace
-11. **Run Deploy** - Deploys to Maven staging repository
-12. **Run Release Prepare** - Prepares the Maven release
-13. **Run Git Diff** - Shows changes made by release:prepare
-14. **Run Release Perform** - Performs the Maven release
-15. **Create Binary Artifacts** - Downloads and processes source/binary
artifacts
-16. **Verify Distribution** - Verifies files on Apache distribution site
-
-## Usage
-
-### Start a New Release
-
-```bash
-python3 scripts/release.py --rc 1
-```
-
-### Resume from a Step
-
-```bash
-python3 scripts/release.py --start-step run_release_perform
-```
-
-### List Available Steps
-
-```bash
-python3 scripts/release.py --list-steps
-```
-
-### Skip Specific Steps
-
-```bash
-python3 scripts/release.py --rc 1 --skip-step clean_maven_repo
-```
-
-### Resume from Last Checkpoint
-
-```bash
-python3 scripts/release.py --resume
-```
-
-## Command-Line Options
-
-### Required (for new releases)
-- `--rc RC_NUMBER` - Release candidate number (e.g., `--rc 1` for RC1)
-
-### Optional
-- `--start-step STEP_NAME` - Start execution from the specified step
-- `--list-steps` - List all available steps and exit
-- `--skip-step STEP_NAME` - Skip a specific step (can be used multiple times)
-- `--resume` - Resume from the last checkpoint (if available)
-
-## Environment Variables
-
-The script prompts for and sets the following environment variables:
-
-- `X_VERSION` - Current release version (detected from pom.xml)
-- `X_NEXT_VERSION` - Next version (calculated)
-- `X_RELEASE` - Full release name (e.g., "juneau-9.2.0-RC1")
-- `X_RELEASE_CANDIDATE` - Release candidate number
-- `X_STAGING` - Staging directory path
-- `X_USERNAME` - Apache username
-- `X_EMAIL` - Apache email
-- `X_GIT_BRANCH` - Git branch name
-- `X_JAVA_HOME` - Java home directory
-- `X_CLEANM2` - Whether to clean Maven repo (Y/N)
-
-## History Files
-
-The script maintains history files (`release-history-{version}.json`) that
store:
-- Default values for prompts
-- Last run date
-- Previous configuration values
-
-This allows the script to provide intelligent defaults on subsequent runs.
-
-## Checkpoint/Resume
-
-The script supports checkpoint/resume functionality:
-- State is saved to `~/.juneau-release-state.json`
-- You can resume from any step using `--resume` or `--start-step`
-- The `--rc` parameter is optional when resuming (extracted from state/history)
-
-## Vote Email Generation
-
-After successful distribution verification, the script automatically generates
a vote email body with:
-- Version and RC number
-- Distribution URLs
-- SHA-512 checksums (fetched from URLs)
-- Git commit hash
-- Vote end date (72 hours from now)
-
-The email is printed to the console.
-
-## Prerequisites
-
-- Python 3.6 or higher
-- Java 17 or higher
-- Maven 3 or higher
-- Git
-- GPG (for signing)
-- SVN client (for distribution upload)
-- wget (for downloading artifacts)
-
-## Exit Codes
-
-- `0` - Success
-- `1` - Error occurred
-
-## Notes
-
-- The script automatically excludes `docs` from the source release zip
-- Source and binary artifacts are downloaded from Maven staging repository
-- Distribution verification checks for expected files on Apache distribution
site
-- The script uses `current-release.py` and `maven-version.py` for version
detection
-
diff --git a/scripts/README-revert-staged.md b/scripts/README-revert-staged.md
deleted file mode 100644
index 7091ed299c..0000000000
--- a/scripts/README-revert-staged.md
+++ /dev/null
@@ -1,46 +0,0 @@
-# Revert Staged Changes Script
-
-## Overview
-
-`revert-staged.py` reverts both staged AND unstaged changes for a file back to
the last committed version (HEAD).
-
-## What It Does
-
-The script:
-1. Verifies the file is tracked by git
-2. Warns the user about discarding changes
-3. Runs `git restore --source=HEAD <file>` to revert the file
-
-## Usage
-
-```bash
-python3 scripts/revert-staged.py <file_path>
-```
-
-### Example
-
-```bash
-python3 scripts/revert-staged.py
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
-```
-
-## ⚠️ Warning
-
-This will discard **ALL changes** (both staged and unstaged) for the specified
file, reverting it back to the last commit.
-
-## Exit Codes
-
-- `0` - Success
-- `1` - Error (file not tracked, git command failed, etc.)
-
-## Requirements
-
-- Python 3.6 or higher
-- Git (git command must be in PATH)
-- No external Python dependencies (uses only standard library)
-
-## Notes
-
-- The file must be tracked by git (the script verifies this)
-- This is a destructive operation - changes cannot be recovered
-- Use `revert-unstaged.py` if you only want to revert unstaged changes while
preserving staged changes
-
diff --git a/scripts/README-revert-unstaged.md
b/scripts/README-revert-unstaged.md
deleted file mode 100644
index a7df4f183b..0000000000
--- a/scripts/README-revert-unstaged.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Revert Unstaged Changes Script
-
-## Overview
-
-`revert-unstaged.py` reverts working directory changes back to what's in the
staging area (INDEX), preserving any staged changes.
-
-## What It Does
-
-The script:
-1. Verifies the file exists
-2. Runs `git restore --source=INDEX <file>` to revert unstaged changes
-3. Preserves any staged changes
-
-## Usage
-
-```bash
-python3 scripts/revert-unstaged.py <file_path>
-```
-
-### Example
-
-```bash
-python3 scripts/revert-unstaged.py
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
-```
-
-## Use Case
-
-This is useful when you have:
-- Staged changes that you've tested and want to keep
-- Unstaged changes that you want to discard
-
-The script will revert the working directory to match the staged version,
effectively discarding only the unstaged changes.
-
-## Exit Codes
-
-- `0` - Success
-- `1` - Error (file not found, git command failed, etc.)
-
-## Requirements
-
-- Python 3.6 or higher
-- Git (git command must be in PATH)
-- No external Python dependencies (uses only standard library)
-
-## Notes
-
-- This only affects unstaged changes - staged changes are preserved
-- Use `revert-staged.py` if you want to revert both staged and unstaged changes
-- The file must exist (the script verifies this)
-
diff --git a/scripts/README-start-docusaurus.md
b/scripts/README-start-docusaurus.md
deleted file mode 100644
index abba49d100..0000000000
--- a/scripts/README-start-docusaurus.md
+++ /dev/null
@@ -1,159 +0,0 @@
-# Start Docusaurus Server Script
-
-## Overview
-
-`start-docusaurus.py` starts the Docusaurus development server with automatic
cleanup and process management.
-
-## What It Does
-
-The script performs these operations before starting the server:
-
-1. **Kills Existing Processes** - Automatically terminates any process running
on port 3000
-2. **Clears Caches** - Removes `.docusaurus`, `build`, and
`node_modules/.cache` directories
-3. **Starts Fresh Server** - Launches the Docusaurus development server
-4. **Cross-Platform** - Works on macOS, Linux, and Windows
-
-## Usage
-
-### Start the Server
-
-```bash
-cd /Users/james.bognar/git/juneau
-python3 scripts/start-docusaurus.py
-```
-
-The server will start at `http://localhost:3000/`
-
-Press `Ctrl+C` to stop the server.
-
-## Output Example
-
-```
-🔄 Starting Docusaurus server...
-📁 Working directory: /Users/james.bognar/git/juneau/docs
-🔍 Checking for existing processes on port 3000...
-⚡ Killing existing process on port 3000 (PID: 12345)
-🧹 Clearing cache...
- Removed: .docusaurus
- Removed: build
- Removed: node_modules/.cache
-🚀 Starting Docusaurus server...
-
-[INFO] Starting the development server...
-[SUCCESS] Docusaurus website is running at: http://localhost:3000/
-```
-
-## When to Use
-
-Use this script when:
-- Starting development on documentation
-- The server is acting strangely (cache issues)
-- Port 3000 is already in use
-- You need a clean start after major changes
-
-## Features
-
-### Automatic Process Cleanup
-
-The script automatically finds and kills any process using port 3000, so you
don't have to manually search for and kill stale processes.
-
-**macOS/Linux**: Uses `lsof -ti:3000`
-**Windows**: Uses `netstat -ano` to find the process
-
-### Cache Clearing
-
-Clears these directories:
-- `.docusaurus` - Docusaurus build cache
-- `build` - Production build output
-- `node_modules/.cache` - npm cache
-
-This ensures a clean start and resolves most cache-related issues.
-
-### Keyboard Interrupt Handling
-
-The script gracefully handles `Ctrl+C` interrupts and shows a proper shutdown
message.
-
-## Troubleshooting
-
-### Port 3000 Still in Use
-
-If the script can't kill the existing process automatically:
-
-**macOS/Linux:**
-```bash
-lsof -ti:3000 | xargs kill -9
-```
-
-**Windows:**
-```bash
-netstat -ano | findstr :3000
-taskkill /PID <pid> /F
-```
-
-### Permission Denied Errors
-
-If you see permission errors when deleting cache directories:
-
-```bash
-# Fix permissions (macOS/Linux)
-sudo chown -R $USER:$USER docs/.docusaurus docs/build
-
-# Or manually delete
-rm -rf docs/.docusaurus docs/build docs/node_modules/.cache
-```
-
-### npm Command Not Found
-
-Make sure Node.js and npm are installed:
-
-```bash
-node --version
-npm --version
-```
-
-If not installed, visit https://nodejs.org/
-
-### package.json Not Found
-
-The script expects to run from the Juneau root directory. Make sure you're in:
-```
-/Users/james.bognar/git/juneau
-```
-
-## Requirements
-
-- **Python**: 3.6 or higher
-- **Node.js**: 14.x or higher
-- **npm**: 6.x or higher
-- **Dependencies**: Run `npm install` in `/docs` directory first
-
-## Replacing the Old Script
-
-This Python script replaces `/docs/start-server.sh` with:
-- ✅ Better process management
-- ✅ Cross-platform compatibility
-- ✅ Automatic cache clearing
-- ✅ Clearer error messages
-- ✅ More robust process detection
-
-## Development Workflow
-
-**Typical usage during development:**
-
-```bash
-# Start the server
-python3 scripts/start-docusaurus.py
-
-# Edit documentation files in docs/pages/
-# Browser auto-reloads as you save changes
-
-# When done, press Ctrl+C to stop
-```
-
-## Notes
-
-- The script automatically detects the `/docs` directory
-- Cache clearing is automatic - no flags needed
-- The server supports hot-reloading (changes appear immediately in browser)
-- Port 3000 is the default Docusaurus port
-
diff --git a/scripts/README-start-examples-rest-jetty.md
b/scripts/README-start-examples-rest-jetty.md
deleted file mode 100644
index b4853fda71..0000000000
--- a/scripts/README-start-examples-rest-jetty.md
+++ /dev/null
@@ -1,287 +0,0 @@
-# Start Juneau REST Examples (Jetty) Script
-
-## Overview
-
-`start-examples-rest-jetty.py` starts the Juneau REST examples application
using the embedded Jetty server. This provides a live demonstration of Juneau's
REST capabilities.
-
-## What It Does
-
-The script performs these operations:
-
-1. **Locates Project** - Finds the Juneau project root directory
-2. **Checks Build** - Verifies that classes are compiled
-3. **Auto-Builds** - Runs `mvn clean compile` if classes are missing
-4. **Starts Server** - Launches the Jetty-based REST examples application
-5. **Handles Shutdown** - Gracefully stops the server on Ctrl+C
-
-## Usage
-
-### Start the Server
-
-```bash
-cd /Users/james.bognar/git/juneau
-python3 scripts/start-examples-rest-jetty.py
-```
-
-The server will start at `http://localhost:10000/`
-
-Press `Ctrl+C` to stop the server.
-
-## Output Example
-
-```
-🚀 Starting Juneau REST Examples (Jetty)...
-📁 Working directory:
/Users/james.bognar/git/juneau/juneau-examples/juneau-examples-rest-jetty
-🚀 Starting Jetty microservice...
-Main class: org.apache.juneau.examples.rest.jetty.App
-Default URL: http://localhost:10000
-
-Press Ctrl+C to stop the server
-
-================================================================================
-[INFO] Scanning for projects...
-[INFO] Building Apache Juneau REST Examples Jetty 9.2.0-SNAPSHOT
-...
-INFO: Jetty server started on port 10000
-INFO: Open your browser to http://localhost:10000
-```
-
-## What You Can Do
-
-Once the server is running, visit `http://localhost:10000/` to:
-
-- **Browse REST Resources** - Explore the example REST APIs
-- **Test Serialization** - See JSON, XML, HTML, and other formats
-- **View Documentation** - Auto-generated API documentation
-- **Try Examples** - Interactive REST interface
-- **Learn Patterns** - See best practices in action
-
-### Example Endpoints
-
-- `http://localhost:10000/` - Root resources with navigation
-- `http://localhost:10000/helloWorld` - Simple hello world example
-- `http://localhost:10000/addressBook` - CRUD operations example
-- `http://localhost:10000/petStore` - Pet store REST API example
-- `http://localhost:10000/photos` - Photo gallery example
-
-## When to Use
-
-Use this script when:
-- **Testing REST Features** - Trying out Juneau REST capabilities
-- **Learning Juneau** - Exploring examples and patterns
-- **Debugging** - Testing changes to REST examples
-- **Demonstrations** - Showing Juneau to others
-- **Development** - Working on REST examples code
-
-## Auto-Build Feature
-
-If the project hasn't been compiled, the script will automatically build it:
-
-```
-⚠️ Classes not found. Building project first...
-🔨 Running: mvn clean compile
-
-[INFO] Scanning for projects...
-[INFO] Building Apache Juneau REST Examples Jetty 9.2.0-SNAPSHOT
-...
-[INFO] BUILD SUCCESS
-
-✓ Build completed successfully
-```
-
-This ensures the server can always start, even on a fresh clone.
-
-## Stopping the Server
-
-### Graceful Shutdown
-
-Press `Ctrl+C` in the terminal:
-
-```
-^C
-🛑 Shutting down server...
-Server stopped
-```
-
-### Force Kill (if needed)
-
-If the server doesn't stop gracefully:
-
-**macOS/Linux:**
-```bash
-lsof -ti:10000 | xargs kill -9
-```
-
-**Windows:**
-```bash
-netstat -ano | findstr :10000
-taskkill /PID <pid> /F
-```
-
-## Troubleshooting
-
-### Port 10000 Already in Use
-
-If you see an error about port 10000 being in use:
-
-1. **Find the process:**
- ```bash
- lsof -ti:10000 # macOS/Linux
- ```
-
-2. **Kill it:**
- ```bash
- lsof -ti:10000 | xargs kill -9
- ```
-
-3. **Or change the port** - Edit `juneau-examples-rest-jetty.cfg` to use a
different port
-
-### Build Failures
-
-If the auto-build fails:
-
-```bash
-# Build from project root
-cd /Users/james.bognar/git/juneau
-mvn clean install -DskipTests
-
-# Or build just the examples
-cd juneau-examples/juneau-examples-rest-jetty
-mvn clean compile
-```
-
-### Maven Not Found
-
-Make sure Maven is installed and in your PATH:
-
-```bash
-mvn -version
-```
-
-If not installed, download from: https://maven.apache.org/
-
-### Java Version Issues
-
-The examples require Java 11 or higher:
-
-```bash
-java -version
-```
-
-If using an older version, update Java or set `JAVA_HOME`:
-
-```bash
-export JAVA_HOME=/path/to/jdk11
-```
-
-### Class Not Found Errors
-
-If you see `ClassNotFoundException`:
-
-1. Clean and rebuild:
- ```bash
- cd juneau-examples/juneau-examples-rest-jetty
- mvn clean compile
- ```
-
-2. Make sure parent project is installed:
- ```bash
- cd /Users/james.bognar/git/juneau
- mvn clean install -DskipTests
- ```
-
-### Server Starts But Can't Connect
-
-1. **Check the port** - Look for "Jetty server started on port XXXX" in the
output
-2. **Check firewall** - Make sure port 10000 isn't blocked
-3. **Wait a moment** - Server may take a few seconds to fully initialize
-4. **Check logs** - Look for errors in the console output
-
-## Configuration
-
-The Jetty server is configured via:
-
-```
-juneau-examples/juneau-examples-rest-jetty/juneau-examples-rest-jetty.cfg
-```
-
-You can modify:
-- **Port** - `Jetty/port`
-- **Context Path** - `Jetty/contextPath`
-- **Resources** - REST resource classes to load
-- **Logging** - Log levels and output
-
-Example:
-```ini
-[Jetty]
-port = 10000
-contextPath = /
-
-[REST]
-allowBodyParam = true
-```
-
-## Development Workflow
-
-### Typical usage during development:
-
-```bash
-# 1. Start the server
-python3 scripts/start-examples-rest-jetty.py
-
-# 2. Open browser to http://localhost:10000
-
-# 3. Make changes to example code
-
-# 4. Stop server (Ctrl+C)
-
-# 5. Rebuild
-cd juneau-examples/juneau-examples-rest-jetty
-mvn compile
-
-# 6. Restart
-python3 scripts/start-examples-rest-jetty.py
-```
-
-### Hot Reload (Advanced)
-
-For faster development, you can use Maven's exec plugin directly with a class
reloader, but this script uses the standard approach for simplicity.
-
-## Requirements
-
-- **Python**: 3.6 or higher
-- **Maven**: 3.6 or higher
-- **Java**: JDK 11 or higher
-- **Built Project**: Script will auto-build if needed
-
-## Replacing Launch Files
-
-This Python script replaces the Eclipse `.launch` file with:
-- ✅ Cross-platform compatibility (not Eclipse-specific)
-- ✅ Auto-build feature
-- ✅ Better error messages
-- ✅ Clearer console output
-- ✅ Can run from anywhere in the project
-
-## Related Examples
-
-- **Spring Boot Version**: Use `start-examples-rest-springboot.py` instead
-- **Pet Store**: Standalone application with more features
-- **Microservices**: See `juneau-microservice` modules
-
-## Performance Notes
-
-- **Startup Time**: 5-15 seconds depending on system
-- **Memory**: ~200-500 MB heap
-- **Port**: Default 10000 (configurable)
-- **Auto-reload**: Not enabled by default (requires restart)
-
-## Notes
-
-- The script automatically detects the project root
-- Uses Maven's exec plugin for proper classpath handling
-- Configuration is read from `juneau-examples-rest-jetty.cfg`
-- The server supports hot-swappable REST resources
-- All REST resources are documented at the root URL
-- Examples demonstrate various serialization formats
-
diff --git a/scripts/README-start-examples-rest-springboot.md
b/scripts/README-start-examples-rest-springboot.md
deleted file mode 100644
index 1a54d6b175..0000000000
--- a/scripts/README-start-examples-rest-springboot.md
+++ /dev/null
@@ -1,366 +0,0 @@
-# Start Juneau REST Examples (Spring Boot) Script
-
-## Overview
-
-`start-examples-rest-springboot.py` starts the Juneau REST examples
application using Spring Boot. This demonstrates how Juneau integrates with the
Spring Boot framework.
-
-## What It Does
-
-The script performs these operations:
-
-1. **Locates Project** - Finds the Juneau project root directory
-2. **Checks Build** - Verifies that classes are compiled
-3. **Auto-Builds** - Runs `mvn clean compile` if classes are missing
-4. **Starts Server** - Launches the Spring Boot REST examples application
-5. **Handles Shutdown** - Gracefully stops the server on Ctrl+C
-
-## Usage
-
-### Start the Server
-
-```bash
-cd /Users/james.bognar/git/juneau
-python3 scripts/start-examples-rest-springboot.py
-```
-
-The server will start at `http://localhost:5000/`
-
-Press `Ctrl+C` to stop the server.
-
-## Output Example
-
-```
-🚀 Starting Juneau REST Examples (Spring Boot)...
-📁 Working directory:
/Users/james.bognar/git/juneau/juneau-examples/juneau-examples-rest-springboot
-🚀 Starting Spring Boot application...
-Main class: org.apache.juneau.examples.rest.springboot.App
-Default URL: http://localhost:5000
-
-Press Ctrl+C to stop the server
-
-================================================================================
-[INFO] Scanning for projects...
-[INFO] Building Apache Juneau REST Examples Spring Boot 9.2.0-SNAPSHOT
-...
- . ____ _ __ _ _
- /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
-( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
- \\/ ___)| |_)| | | | | || (_| | ) ) ) )
- ' |____| .__|_| |_|_| |_\__, | / / / /
- =========|_|==============|___/=/_/_/_/
- :: Spring Boot :: (v3.2.0)
-
-INFO: Started App in 3.456 seconds (JVM running for 4.123)
-Initialized. App available on http://localhost:5000
-```
-
-## What You Can Do
-
-Once the server is running, visit `http://localhost:5000/` to:
-
-- **Browse REST Resources** - Explore the example REST APIs
-- **Test Serialization** - See JSON, XML, HTML, and other formats
-- **View Documentation** - Auto-generated API documentation
-- **Try Examples** - Interactive REST interface
-- **See Spring Integration** - How Juneau works with Spring Boot
-- **Test Dependency Injection** - Spring beans in Juneau resources
-
-### Example Endpoints
-
-- `http://localhost:5000/` - Root resources with navigation
-- `http://localhost:5000/helloWorld` - Hello world with Spring injection
-- `http://localhost:5000/addressBook` - CRUD operations example
-- `http://localhost:5000/petStore` - Pet store REST API example
-- `http://localhost:5000/photos` - Photo gallery example
-
-## When to Use
-
-Use this script when:
-- **Learning Spring Boot Integration** - See how Juneau works with Spring
-- **Testing REST Features** - Trying out Juneau REST capabilities
-- **Debugging** - Testing changes to Spring Boot examples
-- **Comparing** - See differences from Jetty version
-- **Development** - Working on Spring Boot integration code
-
-## Differences from Jetty Version
-
-| Feature | Jetty | Spring Boot |
-|---------|-------|-------------|
-| **Port** | 10000 | 5000 |
-| **Startup** | Faster | Slower (Spring init) |
-| **DI** | Manual | Spring autowiring |
-| **Config** | `.cfg` file | `application.properties` |
-| **Use Case** | Microservices | Enterprise apps |
-
-## Auto-Build Feature
-
-If the project hasn't been compiled, the script will automatically build it:
-
-```
-⚠️ Classes not found. Building project first...
-🔨 Running: mvn clean compile
-
-[INFO] Scanning for projects...
-[INFO] Building Apache Juneau REST Examples Spring Boot 9.2.0-SNAPSHOT
-...
-[INFO] BUILD SUCCESS
-
-✓ Build completed successfully
-```
-
-This ensures the server can always start, even on a fresh clone.
-
-## Stopping the Server
-
-### Graceful Shutdown
-
-Press `Ctrl+C` in the terminal:
-
-```
-^C
-🛑 Shutting down server...
-Server stopped
-```
-
-Spring Boot will perform a graceful shutdown, closing resources properly.
-
-### Force Kill (if needed)
-
-If the server doesn't stop gracefully:
-
-**macOS/Linux:**
-```bash
-lsof -ti:5000 | xargs kill -9
-```
-
-**Windows:**
-```bash
-netstat -ano | findstr :5000
-taskkill /PID <pid> /F
-```
-
-## Troubleshooting
-
-### Port 5000 Already in Use
-
-If you see an error about port 5000 being in use:
-
-1. **Find the process:**
- ```bash
- lsof -ti:5000 # macOS/Linux
- ```
-
-2. **Kill it:**
- ```bash
- lsof -ti:5000 | xargs kill -9
- ```
-
-3. **Or change the port** - Set environment variable:
- ```bash
- export SERVER_PORT=8080
- python3 scripts/start-examples-rest-springboot.py
- ```
-
- Or edit `application.properties`:
- ```properties
- server.port=8080
- ```
-
-### Build Failures
-
-If the auto-build fails:
-
-```bash
-# Build from project root
-cd /Users/james.bognar/git/juneau
-mvn clean install -DskipTests
-
-# Or build just the examples
-cd juneau-examples/juneau-examples-rest-springboot
-mvn clean compile
-```
-
-### Maven Not Found
-
-Make sure Maven is installed and in your PATH:
-
-```bash
-mvn -version
-```
-
-If not installed, download from: https://maven.apache.org/
-
-### Spring Boot Startup Fails
-
-Common issues:
-
-1. **Dependency conflicts** - Clean and rebuild:
- ```bash
- mvn clean compile
- ```
-
-2. **Port conflicts** - Change the port (see above)
-
-3. **Memory issues** - Increase heap size:
- ```bash
- export MAVEN_OPTS="-Xmx2g"
- python3 scripts/start-examples-rest-springboot.py
- ```
-
-### Java Version Issues
-
-The Spring Boot examples require Java 17 or higher:
-
-```bash
-java -version
-```
-
-If using an older version, update Java or set `JAVA_HOME`:
-
-```bash
-export JAVA_HOME=/path/to/jdk17
-```
-
-### Slow Startup
-
-Spring Boot can take 5-15 seconds to start. This is normal due to:
-- Spring context initialization
-- Component scanning
-- Dependency injection setup
-- Bean creation
-
-For faster development iterations, consider:
-- Using Spring DevTools (hot reload)
-- The Jetty version (faster startup)
-- Disabling unused Spring features
-
-### Server Starts But Can't Connect
-
-1. **Check the port** - Look for "Started App in X.XXX seconds" in the output
-2. **Wait for initialization** - Spring Boot may take a moment after "Started"
-3. **Check firewall** - Make sure port 5000 isn't blocked
-4. **Check logs** - Look for errors in the console output
-5. **Verify URL** - The app prints "App available on http://localhost:5000"
-
-## Configuration
-
-The Spring Boot application is configured via:
-
-```
-juneau-examples/juneau-examples-rest-springboot/src/main/resources/application.properties
-```
-
-You can modify:
-- **Server Port** - `server.port=5000`
-- **Context Path** - `server.servlet.context-path=/`
-- **Logging** - `logging.level.org.apache.juneau=DEBUG`
-- **Spring Settings** - Any Spring Boot property
-
-Example:
-```properties
-server.port=5000
-server.servlet.context-path=/
-logging.level.org.apache.juneau=INFO
-spring.main.banner-mode=console
-```
-
-You can also override properties via environment variables:
-```bash
-export SERVER_PORT=8080
-python3 scripts/start-examples-rest-springboot.py
-```
-
-## Development Workflow
-
-### Typical usage during development:
-
-```bash
-# 1. Start the server
-python3 scripts/start-examples-rest-springboot.py
-
-# 2. Open browser to http://localhost:5000
-
-# 3. Make changes to example code
-
-# 4. Stop server (Ctrl+C)
-
-# 5. Rebuild
-cd juneau-examples/juneau-examples-rest-springboot
-mvn compile
-
-# 6. Restart
-python3 scripts/start-examples-rest-springboot.py
-```
-
-### Hot Reload (Spring DevTools)
-
-For faster development, add Spring DevTools to the POM:
-
-```xml
-<dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-devtools</artifactId>
- <optional>true</optional>
-</dependency>
-```
-
-Then code changes will auto-reload without restarting the server.
-
-## Spring Integration Features
-
-This example demonstrates:
-
-- **@SpringBootApplication** - Spring Boot entry point
-- **@Bean** - Exposing Juneau resources as Spring beans
-- **Dependency Injection** - Autowiring services into REST resources
-- **ServletRegistrationBean** - Registering Juneau servlet
-- **Spring Configuration** - Using `application.properties`
-
-Example from the code:
-```java
-@Bean
-public HelloWorldMessageProvider getHelloWorldMessageProvider() {
- return new HelloWorldMessageProvider("Hello Spring injection user!");
-}
-```
-
-## Requirements
-
-- **Python**: 3.6 or higher
-- **Maven**: 3.6 or higher
-- **Java**: JDK 17 or higher (Spring Boot 3.x requirement)
-- **Built Project**: Script will auto-build if needed
-
-## Replacing Launch Files
-
-This Python script replaces the Eclipse `.launch` file with:
-- ✅ Cross-platform compatibility (not Eclipse-specific)
-- ✅ Auto-build feature
-- ✅ Better error messages
-- ✅ Clearer console output
-- ✅ Can run from anywhere in the project
-- ✅ Uses Spring Boot Maven plugin properly
-
-## Related Examples
-
-- **Jetty Version**: Use `start-examples-rest-jetty.py` for faster startup
-- **Pet Store**: Standalone application with more features
-- **Microservices**: See `juneau-microservice` modules
-
-## Performance Notes
-
-- **Startup Time**: 5-20 seconds (Spring Boot overhead)
-- **Memory**: ~300-600 MB heap (Spring context)
-- **Port**: Default 5000 (configurable)
-- **Hot Reload**: Available via Spring DevTools
-
-## Notes
-
-- The script automatically detects the project root
-- Uses Maven's Spring Boot plugin for proper execution
-- Configuration is read from `application.properties`
-- Spring context includes all `@Bean` annotated methods
-- Supports full Spring Boot ecosystem (Actuator, Security, etc.)
-- Examples demonstrate Spring dependency injection
-- Slower startup than Jetty but more enterprise features
-
diff --git a/scripts/README-test.md b/scripts/README-test.md
deleted file mode 100644
index aa44a58208..0000000000
--- a/scripts/README-test.md
+++ /dev/null
@@ -1,108 +0,0 @@
-# Test Script
-
-## Overview
-
-`test.py` is a build and test helper script for Apache Juneau. It provides a
convenient way to run Maven builds and tests with various options.
-
-## What It Does
-
-The script can:
-- Build the project (clean install without tests)
-- Run tests
-- Do both (full clean build + tests)
-
-## Usage
-
-### Full Build and Test (Default)
-
-```bash
-python3 scripts/test.py
-# or
-python3 scripts/test.py --full
-# or
-python3 scripts/test.py -f
-```
-
-This performs a clean build and runs all tests.
-
-### Build Only (Skip Tests)
-
-```bash
-python3 scripts/test.py --build-only
-# or
-python3 scripts/test.py -b
-```
-
-This runs `mvn clean install -DskipTests` to build the project without running
tests.
-
-### Test Only (No Build)
-
-```bash
-python3 scripts/test.py --test-only
-# or
-python3 scripts/test.py -t
-```
-
-This runs `mvn test -Drat.skip=true` to run tests without rebuilding.
-
-### Verbose Output
-
-```bash
-python3 scripts/test.py --verbose
-# or
-python3 scripts/test.py -v
-```
-
-Shows full Maven output instead of just the last 50 lines.
-
-## Command-Line Options
-
-- `--build-only, -b` - Only build (skip tests)
-- `--test-only, -t` - Only run tests (no build)
-- `--full, -f` - Clean build + run tests (default)
-- `--verbose, -v` - Show full Maven output
-- `--help, -h` - Show help message
-
-## Examples
-
-### Quick Test Run
-
-```bash
-python3 scripts/test.py -t
-```
-
-### Rebuild After Code Changes
-
-```bash
-python3 scripts/test.py -b
-```
-
-### Full Build and Test with Verbose Output
-
-```bash
-python3 scripts/test.py -f -v
-```
-
-## Output
-
-By default, the script shows the last 50 lines of Maven output. Use
`--verbose` to see the full output.
-
-The script also attempts to parse test results and display failure/error
counts if tests fail.
-
-## Exit Codes
-
-- `0` - Success
-- `1` - Failure (build or tests failed)
-
-## Requirements
-
-- Python 3.6 or higher
-- Maven (mvn command must be in PATH)
-- No external Python dependencies (uses only standard library)
-
-## Notes
-
-- The script automatically skips RAT checks when running tests
(`-Drat.skip=true`)
-- Tests are skipped during build (`-DskipTests`)
-- All commands are run from the project root directory
-