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 9a81021e1c chore: migrate Cursor commands to skills, remove AI_CONTINUE
9a81021e1c is described below
commit 9a81021e1c383baf66ebd1c37209298b23be6bab
Author: James Bognar <[email protected]>
AuthorDate: Sun Feb 22 14:23:13 2026 -0500
chore: migrate Cursor commands to skills, remove AI_CONTINUE
---
.cursor/skills/push/SKILL.md | 24 ++++++++++
.cursor/skills/todo/SKILL.md | 20 ++++++++
@AI_CONTINUE.md | 112 -------------------------------------------
3 files changed, 44 insertions(+), 112 deletions(-)
diff --git a/.cursor/skills/push/SKILL.md b/.cursor/skills/push/SKILL.md
new file mode 100644
index 0000000000..72f5cb676c
--- /dev/null
+++ b/.cursor/skills/push/SKILL.md
@@ -0,0 +1,24 @@
+---
+name: push
+description: Push Changes
+disable-model-invocation: true
+---
+# Push Changes
+
+Run the Juneau push script to build, test, commit, and push changes. You will
determine the commit message yourself based on the staged/changed files.
+
+## Steps
+
+1. **Inspect changes**: Run `git status` and `git diff --staged` (or `git
diff` if nothing staged) to see what has changed.
+2. **Determine commit message**: Based on the changes, craft a clear,
descriptive commit message. Follow conventional commit style when appropriate
(e.g., `fix:`, `feat:`, `refactor:`, `docs:`). Keep it concise but specific.
+3. **Run push script**: Execute from the project root (master/):
+
+ ```
+ python3 scripts/push.py "YOUR_COMMIT_MESSAGE"
+ ```
+
+ Use `--skip-tests` only for documentation-only changes. Do not use
`--dry-run` unless the user asks.
+
+4. **Report result**: Summarize what was committed and pushed, or report any
failures.
+
+Do not ask the user for the commit message—determine it from the changes
yourself.
diff --git a/.cursor/skills/todo/SKILL.md b/.cursor/skills/todo/SKILL.md
new file mode 100644
index 0000000000..d67a993450
--- /dev/null
+++ b/.cursor/skills/todo/SKILL.md
@@ -0,0 +1,20 @@
+---
+name: todo
+description: Add to TODO
+disable-model-invocation: true
+---
+# Add to TODO
+
+Add an entry to `TODO.md` in the project root.
+
+## Steps
+
+1. **Get the TODO text**: Use the text the user provides after `/todo` as the
new TODO entry. If no text is given, ask what they would like to add.
+2. **Read TODO.md**: Check the current format and existing entries.
+3. **Add the entry**: Append a new bullet to the list, matching the existing
format:
+ ```
+ - [description of the TODO]
+ ```
+4. **Confirm**: Tell the user the entry was added.
+
+Keep the description clear and actionable. Do not add TODO-# identifiers to
the list—those are only used when referencing items for "work on TODO-X"
commands.
diff --git a/@AI_CONTINUE.md b/@AI_CONTINUE.md
deleted file mode 100644
index 4662485bfe..0000000000
--- a/@AI_CONTINUE.md
+++ /dev/null
@@ -1,112 +0,0 @@
-# SonarLint System.err/out Replacement - Continuation Guide
-
-## Current Status
-
-We are working on resolving SonarLint naming convention and code quality
issues, primarily by replacing `System.err` and `System.out` calls with
`org.apache.juneau.commons.logging.Logger` instances, or by adding
`@SuppressWarnings` annotations where direct console output is intentional.
-
-## What We've Done
-
-### Completed Replacements (System.err/out → Logger)
-
-1. **BasicSwaggerProviderSession.java**: Replaced `System.err.println` with
`LOG.warning()`
-2. **Microservice.java**: Replaced `System.err.println` with
`getLogger().warning()`
-3. **RestContext.java**:
- - Replaced `System.err.println` with `LOG.warning()`
- - Ensured `createLogger` returns `org.apache.juneau.commons.logging.Logger`
- - Registered logger under both `Logger.class` (Juneau) and
`java.util.logging.Logger.class` in bean store for compatibility
-4. **ThrowableUtils.java**: Added `LOG.warning()` alongside existing
`printStackTrace` call
-5. **Utils.java**: Replaced `System.out.println` with
`Logger.getLogger(Utils.class).info()`
-6. **WriterSerializer.java**: Replaced `System.out.println` with
`Logger.getLogger(WriterSerializer.class).info()`
-7. **SystemUtils.java**: Replaced `System.out.println` in shutdown hook with
`LOG.info()`
-8. **Example Files**: Replaced `System.out.println`/`System.err.println` with
`Logger.getLogger(ClassName.class).info()` in:
- - `App.java`, `AtomHtmlExample.java`, `HtmlComplexExample.java`,
`HtmlSimpleExample.java`
- - `JsonComplexExample.java`, `JsonConfigurationExample.java`,
`JsonSimpleExample.java`
- - `OapiExample.java`, `SvlExample.java`, `XmlComplexExample.java`,
`XmlConfigurationExample.java`, `XmlSimpleExample.java`
- - `UonComplexExample.java`, `UonExample.java`, `GitControl.java`
-
-### Completed Suppressions (Intentional Console Output)
-
-1. **Assertion.java**:
- - Reverted Logger changes (direct console output is intentional for
assertion error output)
- - Added class-level `@SuppressWarnings({"java:S106", "java:S108"})`
-2. **Console.java**:
- - Reverted Logger changes (direct console output is intentional for console
utility)
- - Added class-level `@SuppressWarnings({"java:S106", "java:S108"})`
-3. **PredicateUtils.java**:
- - Reverted Logger changes (tests capture `System.err` output)
- - Added class-level `@SuppressWarnings("java:S106")`
-
-### Files Left Unchanged (Intentional)
-
-- **RestClient.java**: Assignment of `System.err` to `console` field is
intentional for direct console output, not logging
-
-## Key Technical Details
-
-### Logger Type Consistency
-- **Primary Logger**: `org.apache.juneau.commons.logging.Logger` (extends
`java.util.logging.Logger`)
-- **Bean Store Registration**: In `RestContext`, logger must be registered
under both:
- - `Logger.class` (Juneau logger)
- - `java.util.logging.Logger.class` (for `CallLogger` compatibility)
-
-### SonarLint Rules Addressed
-- **java:S106**: Standard outputs should not be used directly for logging
-- **java:S108**: Nested blocks of code should not be left empty
-
-### Pattern for Logger Usage
-```java
-import org.apache.juneau.commons.logging.Logger;
-
-private static final Logger LOG = Logger.getLogger(ClassName.class);
-
-// For warnings:
-LOG.warning("Message: {}", arg);
-LOG.warning(throwable, "Message");
-
-// For info:
-LOG.info("Message: {}", arg);
-Logger.getLogger(ClassName.class).info("Message");
-```
-
-## Issues Resolved
-
-1. **Type Mismatch in RestContext**: Fixed by ensuring `createLogger` returns
`org.apache.juneau.commons.logging.Logger` and registering under both logger
types
-2. **Test Failure in PredicateUtils_Test**: Fixed by reverting to
`System.err.println()` (tests capture `System.err` output) and adding
suppression
-3. **Import Issues**: Added `import org.apache.juneau.commons.logging.Logger;`
to `RestObject.java` and `RestServlet.java`
-
-## Current State
-
-All explicit requests to replace `System.out`/`err` with loggers or
revert/suppress have been completed. All compilation errors have been fixed.
The codebase now uses structured logging
(`org.apache.juneau.commons.logging.Logger`) for logging purposes, while
preserving direct console output where it's intentional (utility classes,
tests, etc.).
-
-## Files Modified
-
-### Core Files
--
`juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java`
--
`juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java`
--
`juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestObject.java`
--
`juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java`
--
`juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java`
--
`juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/ThrowableUtils.java`
--
`juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/Utils.java`
--
`juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java`
--
`juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/SystemUtils.java`
-
-### Suppressed Files (Intentional Console Output)
--
`juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertion.java`
--
`juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/io/Console.java`
--
`juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/PredicateUtils.java`
-
-### Example Files
-- Multiple example files in `juneau-examples/` directories
-
-## Next Steps
-
-1. **Verify All Changes**: Run tests to ensure all changes work correctly
-2. **Check SonarLint**: Verify that SonarLint warnings are resolved
-3. **Continue with Other SonarLint Issues**: If there are other SonarLint
issues to address, proceed with those
-
-## Notes
-
-- Always use `org.apache.juneau.commons.logging.Logger` for logging (not
`java.util.logging.Logger`)
-- When direct console output is intentional (utilities, tests), use
`@SuppressWarnings("java:S106")` at class level
-- Tests that capture `System.err` output require `System.err.println()` to
remain (use suppression instead of replacement)
-- Logger registration in bean stores may need both Juneau and standard Java
logger types for compatibility