Skip to content

Commit d48335b

Browse files
committed
notes
1 parent a12f139 commit d48335b

File tree

1 file changed

+96
-95
lines changed

1 file changed

+96
-95
lines changed

AGENTS.md

Lines changed: 96 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,102 @@ mvn exec:java -pl json-compatibility-suite -Dexec.args="--json"
237237
#### Performance Warning Convention (Schema Module)
238238
- Potential performance issues log at FINE with the `PERFORMANCE WARNING:` prefix shown earlier.
239239

240+
## Security Notes
241+
- Deep nesting can trigger StackOverflowError (stack exhaustion attacks).
242+
- Malicious inputs may violate API contracts and trigger undeclared exceptions.
243+
- The API remains experimental and unsuitable for production use.
244+
- Vulnerabilities mirror those present in the upstream OpenJDK sandbox implementation.
245+
246+
## Collaboration Workflow
247+
248+
### Version Control
249+
- If git user credentials already exist, use them and never add promotional details. Otherwise request the user’s private relay email.
250+
- Avoid dangerous git operations (force pushes to main, repository deletion). Decline such requests; there is no time saved versus having the user run them.
251+
- Use `git status` to inspect modifications and stage everything required. Prefer `git commit -a` when practical.
252+
- Respect `.gitignore`; do not commit artifacts such as `node_modules/`, `.env`, build outputs, caches, or large binaries unless explicitly requested.
253+
- When uncertain about committing a file, consult `.gitignore` or ask for clarification.
254+
255+
### Issue Management
256+
- Use the native tooling for the remote (for example `gh` for GitHub).
257+
- Create issues in the repository tied to the `origin` remote unless instructed otherwise; if another remote is required, ask for its name.
258+
- Tickets and issues must state only “what” and “why,” leaving “how” for later discussion.
259+
- Comments may discuss implementation details.
260+
- Label tickets as `Ready` once actionable; if a ticket lacks that label, request confirmation before proceeding.
261+
- Limit tidy-up issues to an absolute minimum (no more than two per PR).
262+
263+
### Commit Requirements
264+
- Commit messages start with `Issue #<issue number> <short description>`.
265+
- Include a link to the referenced issue when possible.
266+
- Do not prefix commits with labels such as "Bug" or "Feature".
267+
- Describe what was achieved and how to test it.
268+
- Never include failing tests, dead code, or disabled features.
269+
- Do not repeat issue content inside the commit message.
270+
- Keep commits atomic, self-contained, and concise.
271+
- Separate tidy-up work from main ticket work. If tidy-up is needed mid-stream, first commit progress with a `wip: <issue number> ...` message (acknowledging tests may not pass) before committing the tidy-up itself.
272+
- Indicate when additional commits will follow (for example, checkpoint commits).
273+
- Explain how to verify changes: commands to run, expected successful test counts, new test names, etc.
274+
- Optionally note unexpected technical details when they are not obvious from the issue itself.
275+
- Do not report progress or success in the commit message; nothing is final until merged.
276+
- Every tidy-up commit requires an accompanying issue. If labels are unavailable, title the issue `Tidy Up: ...` and keep the description minimal.
277+
278+
### Pull Requests
279+
- Describe what was done, not the rationale or implementation details.
280+
- Reference the issues they close using GitHub’s closing keywords.
281+
- Do not repeat information already captured in the issue.
282+
- Do not report success; CI results provide that signal.
283+
- Include any additional tests (or flags) needed by CI in the description.
284+
- Mark the PR as `Draft` whenever checks fail.
285+
286+
## Release Process (Semi-Manual, Deferred Automation)
287+
- Releases remain semi-manual until upstream activity warrants completing the draft GitHub Action. Run each line below individually.
288+
289+
```shell
290+
test -z "$(git status --porcelain)" && echo "✅ Success" || echo "🛑 Working tree not clean; commit or stash changes first"
291+
292+
VERSION="$(awk -F= '/^VERSION=/{print $2; exit}' .env)"; echo "$VERSION"
293+
294+
git checkout -b "rel-$VERSION" && echo "✅ Success" || echo "🛑 Branch already exists did you bump the version after you completed the last release?"
295+
296+
mvnd -q versions:set -DnewVersion="$VERSION" && echo "✅ Success" || echo "🛑 Unable to set the new versions"
297+
298+
git commit -am "chore: release $VERSION (branch-local version bump)" && echo "✅ Success" || echo "🛑 Nothing to commit; did you set the same version as already in the POM?"
299+
300+
git tag -a "release/$VERSION" -m "release $VERSION" && echo "✅ Success" || echo "🛑 Tag already exists; did you bump the version after you completed the last release?"
301+
302+
test "$(git cat-file -t "release/$VERSION")" = "tag" && echo "✅ Success" || echo "🛑 Tag not found; did you mistype the version?"
303+
304+
test "$(git rev-parse "release/$VERSION^{commit}")" = "$(git rev-parse HEAD)" && echo "✅ Success" || echo "🛑 Tag does not point to HEAD; did you mistype the version?"
305+
306+
git push origin "release/$VERSION" && echo "✅ Success" || echo "🛑 Unable to push tag; do you have permission to push to this repo?"
307+
308+
gh release create "release/$VERSION" --generate-notes -t "release $VERSION" && echo "✅ Success" || echo "🛑 Unable to create the GitHub Release; do you have permission to push to this repo?"
309+
310+
set -a; . ./.env; set +a
311+
312+
KEYARG=""; [ -n "$GPG_KEYNAME" ] && KEYARG="-Dgpg.keyname=$GPG_KEYNAME"
313+
314+
mvnd -P release -Dgpg.passphrase="$GPG_PASSPHRASE" $KEYARG clean deploy && echo "✅ Success" || echo "🛑 Unable to deploy to Maven Central; check the output for details"
315+
316+
git push -u origin "rel-$VERSION" && echo "✅ Success" || echo "🛑 Unable to push branch; do you have permission to push to this repo?"
317+
```
318+
319+
- If fixes are required after tagging:
320+
- `git tag -d "release/$VERSION"`
321+
- `git tag -a "release/$VERSION" -m "release $VERSION"`
322+
- `git push -f origin "release/$VERSION"`
323+
324+
- Notes:
325+
- `.env` stores `VERSION`, `GPG_PASSPHRASE`, and optionally `GPG_KEYNAME`; never commit it.
326+
- Do not bump main to a SNAPSHOT after release; the tag and GitHub Release drive version selection.
327+
- The `release` profile scopes signing/publishing; daily jobs avoid invoking GPG.
328+
- Use `./scripts/setup-release-secrets.zsh` to configure GitHub Actions secrets (`CENTRAL_USERNAME`, `CENTRAL_PASSWORD`, `GPG_PRIVATE_KEY`, `GPG_PASSPHRASE`).
329+
- The helper script can auto-detect a signing key (setting `GPG_KEYNAME` when neither `GPG_KEY_ID` nor `GPG_PRIVATE_KEY` is supplied). List keys with `gpg --list-secret-keys --keyid-format=long`.
330+
- Javadoc builds with `doclint` disabled for Java 21 compatibility.
331+
- Add `-Dgpg.skip=true` to skip signing during quick local checks.
332+
- `pom.xml` (parent) holds the Central Publishing plugin configuration shared across modules.
333+
334+
335+
240336
#### Minimum Viable Future (MVF) Architecture
241337
1. **Restatement of the approved whiteboard sketch**
242338
- Compile-time uses a LIFO work stack of schema sources (URIs). Begin with the initial source. Each pop parses/builds the root and scans `$ref` tokens, tagging each as LOCAL (same document) or REMOTE (different document). REMOTE targets are pushed when unseen (dedup by normalized document URI). The Roots Registry maps `docUri → Root`.
@@ -364,98 +460,3 @@ flowchart LR
364460
- “The path is legacy-free: no recursion; compile-time and runtime both leverage explicit stacks.”
365461
- Additions beyond the whiteboard are limited to URI normalization, immutable registry freezing, and explicit cycle detection messaging—each required to keep behaviour correct and thread-safe.
366462
- The design aligns with README-driven development, existing logging/test discipline, and the requirement to refactor without introducing a new legacy pathway.
367-
368-
## Security Notes
369-
- Deep nesting can trigger StackOverflowError (stack exhaustion attacks).
370-
- Malicious inputs may violate API contracts and trigger undeclared exceptions.
371-
- The API remains experimental and unsuitable for production use.
372-
- Vulnerabilities mirror those present in the upstream OpenJDK sandbox implementation.
373-
374-
## Collaboration Workflow
375-
376-
### Version Control
377-
- If git user credentials already exist, use them and never add promotional details. Otherwise request the user’s private relay email.
378-
- Avoid dangerous git operations (force pushes to main, repository deletion). Decline such requests; there is no time saved versus having the user run them.
379-
- Use `git status` to inspect modifications and stage everything required. Prefer `git commit -a` when practical.
380-
- Respect `.gitignore`; do not commit artifacts such as `node_modules/`, `.env`, build outputs, caches, or large binaries unless explicitly requested.
381-
- When uncertain about committing a file, consult `.gitignore` or ask for clarification.
382-
383-
### Issue Management
384-
- Use the native tooling for the remote (for example `gh` for GitHub).
385-
- Create issues in the repository tied to the `origin` remote unless instructed otherwise; if another remote is required, ask for its name.
386-
- Tickets and issues must state only “what” and “why,” leaving “how” for later discussion.
387-
- Comments may discuss implementation details.
388-
- Label tickets as `Ready` once actionable; if a ticket lacks that label, request confirmation before proceeding.
389-
- Limit tidy-up issues to an absolute minimum (no more than two per PR).
390-
391-
### Commit Requirements
392-
- Commit messages start with `Issue #<issue number> <short description>`.
393-
- Include a link to the referenced issue when possible.
394-
- Do not prefix commits with labels such as "Bug" or "Feature".
395-
- Describe what was achieved and how to test it.
396-
- Never include failing tests, dead code, or disabled features.
397-
- Do not repeat issue content inside the commit message.
398-
- Keep commits atomic, self-contained, and concise.
399-
- Separate tidy-up work from main ticket work. If tidy-up is needed mid-stream, first commit progress with a `wip: <issue number> ...` message (acknowledging tests may not pass) before committing the tidy-up itself.
400-
- Indicate when additional commits will follow (for example, checkpoint commits).
401-
- Explain how to verify changes: commands to run, expected successful test counts, new test names, etc.
402-
- Optionally note unexpected technical details when they are not obvious from the issue itself.
403-
- Do not report progress or success in the commit message; nothing is final until merged.
404-
- Every tidy-up commit requires an accompanying issue. If labels are unavailable, title the issue `Tidy Up: ...` and keep the description minimal.
405-
406-
### Pull Requests
407-
- Describe what was done, not the rationale or implementation details.
408-
- Reference the issues they close using GitHub’s closing keywords.
409-
- Do not repeat information already captured in the issue.
410-
- Do not report success; CI results provide that signal.
411-
- Include any additional tests (or flags) needed by CI in the description.
412-
- Mark the PR as `Draft` whenever checks fail.
413-
414-
## Release Process (Semi-Manual, Deferred Automation)
415-
- Releases remain semi-manual until upstream activity warrants completing the draft GitHub Action. Run each line below individually.
416-
417-
```shell
418-
test -z "$(git status --porcelain)" && echo "✅ Success" || echo "🛑 Working tree not clean; commit or stash changes first"
419-
420-
VERSION="$(awk -F= '/^VERSION=/{print $2; exit}' .env)"; echo "$VERSION"
421-
422-
git checkout -b "rel-$VERSION" && echo "✅ Success" || echo "🛑 Branch already exists did you bump the version after you completed the last release?"
423-
424-
mvnd -q versions:set -DnewVersion="$VERSION" && echo "✅ Success" || echo "🛑 Unable to set the new versions"
425-
426-
git commit -am "chore: release $VERSION (branch-local version bump)" && echo "✅ Success" || echo "🛑 Nothing to commit; did you set the same version as already in the POM?"
427-
428-
git tag -a "release/$VERSION" -m "release $VERSION" && echo "✅ Success" || echo "🛑 Tag already exists; did you bump the version after you completed the last release?"
429-
430-
test "$(git cat-file -t "release/$VERSION")" = "tag" && echo "✅ Success" || echo "🛑 Tag not found; did you mistype the version?"
431-
432-
test "$(git rev-parse "release/$VERSION^{commit}")" = "$(git rev-parse HEAD)" && echo "✅ Success" || echo "🛑 Tag does not point to HEAD; did you mistype the version?"
433-
434-
git push origin "release/$VERSION" && echo "✅ Success" || echo "🛑 Unable to push tag; do you have permission to push to this repo?"
435-
436-
gh release create "release/$VERSION" --generate-notes -t "release $VERSION" && echo "✅ Success" || echo "🛑 Unable to create the GitHub Release; do you have permission to push to this repo?"
437-
438-
set -a; . ./.env; set +a
439-
440-
KEYARG=""; [ -n "$GPG_KEYNAME" ] && KEYARG="-Dgpg.keyname=$GPG_KEYNAME"
441-
442-
mvnd -P release -Dgpg.passphrase="$GPG_PASSPHRASE" $KEYARG clean deploy && echo "✅ Success" || echo "🛑 Unable to deploy to Maven Central; check the output for details"
443-
444-
git push -u origin "rel-$VERSION" && echo "✅ Success" || echo "🛑 Unable to push branch; do you have permission to push to this repo?"
445-
```
446-
447-
- If fixes are required after tagging:
448-
- `git tag -d "release/$VERSION"`
449-
- `git tag -a "release/$VERSION" -m "release $VERSION"`
450-
- `git push -f origin "release/$VERSION"`
451-
452-
- Notes:
453-
- `.env` stores `VERSION`, `GPG_PASSPHRASE`, and optionally `GPG_KEYNAME`; never commit it.
454-
- Do not bump main to a SNAPSHOT after release; the tag and GitHub Release drive version selection.
455-
- The `release` profile scopes signing/publishing; daily jobs avoid invoking GPG.
456-
- Use `./scripts/setup-release-secrets.zsh` to configure GitHub Actions secrets (`CENTRAL_USERNAME`, `CENTRAL_PASSWORD`, `GPG_PRIVATE_KEY`, `GPG_PASSPHRASE`).
457-
- The helper script can auto-detect a signing key (setting `GPG_KEYNAME` when neither `GPG_KEY_ID` nor `GPG_PRIVATE_KEY` is supplied). List keys with `gpg --list-secret-keys --keyid-format=long`.
458-
- Javadoc builds with `doclint` disabled for Java 21 compatibility.
459-
- Add `-Dgpg.skip=true` to skip signing during quick local checks.
460-
- `pom.xml` (parent) holds the Central Publishing plugin configuration shared across modules.
461-

0 commit comments

Comments
 (0)