Skip to content

docs: correct command reference, fill security/config gaps, cut 2.1.0 - #60

Merged
sakebomb merged 1 commit into
masterfrom
docs/publish-readiness
Aug 20, 2026
Merged

docs: correct command reference, fill security/config gaps, cut 2.1.0#60
sakebomb merged 1 commit into
masterfrom
docs/publish-readiness

Conversation

@sakebomb

Copy link
Copy Markdown
Owner

Publish-readiness documentation pass from the docs audit, ahead of a Modrinth/Hangar release. Every claim was re-checked against the code.

Summary

  • README "Extra commands" was actively wrong — it listed ~15 commands under names that don't exist (bare/poll* forms carried over unchanged from the upstream README); each returns Fail if copied. Rewritten against the real command registry (world.spawnEntity, events.projectile.hits, player.events.*, …), and documents getAbsPos/setAbsPos and the per-player setPlayer token.
  • README publish-readiness — adds a Quickstart (install jar from Releases + pip install + a 5-line example) so non-source users have a path; the "Libraries" section now points at the bundled src/main/resources/mcpi instead of the archived upstream repo; adds player-tokens to Config; cross-links CONTRIBUTING/CHANGELOG.
  • CHANGELOG — adds per-player setPlayer tokens (setPlayer(name) performs no ownership check — per-player authorization for binding/observation #47), brute-force lockout (Rate-limit setPlayer token attempts (brute-force lockout) #51), owner-scoped entity removal + bounded socket I/O (fix: gate entity removal by ownership and cap socket I/O (security) #54), and client token redaction (fix: keep auth tokens out of client errors, close socket on failed auth #55); cuts [Unreleased] as [2.1.0].
  • SECURITY.md — documents the three previously-undocumented mitigations (per-session entity ownership incl. bulk removal, max-blocks-per-tick, enable-op-commands), the new bounded socket I/O, and the setPlayer lockout.
  • Version bump 2.0.0 → 2.1.0 across pom, plugin.yml, client pyproject/__version__, and the bug-report template.
  • plugin.yml: startup: postworldload: POSTWORLDstartup is not a recognized Bukkit plugin.yml key (silent no-op); load is the real load-order directive. Behaviorally a no-op (POSTWORLD is already the default) but now correct and explicit.

Test plan

  • ./mvnw test — 127 Java tests pass (plugin still loads under MockBukkit with load: POSTWORLD)
  • pytest client — 25 client tests pass
  • ./mvnw package builds raspberryjuice-2.1.0.jar
  • Command names in the rewritten README verified against buildCommandRegistry() and the Python client's wire strings
  • Live server run of load: POSTWORLD not performed — change is a standard Bukkit key and behaviorally the default; verified only that the plugin loads under MockBukkit

https://claude.ai/code/session_01AcK3SgXRTVzAKBdPZw72sr

Publish-readiness pass from the documentation audit, ahead of a Modrinth/Hangar
release. All claims re-checked against the code.

- README "Extra commands" listed ~15 commands under names that no longer exist
  (bare/poll* forms carried over unchanged from the upstream README); every one
  returns Fail if copied. Rewritten against the actual command registry
  (namespaced world.*/events.*/player.events.* forms), with getAbsPos and the
  per-player setPlayer token documented.
- README: add a Quickstart (install jar from Releases + pip install + example)
  so a non-source user has a path; point the "Libraries" section at the bundled
  src/main/resources/mcpi instead of the archived upstream repo; add player-tokens
  to Config; cross-link CONTRIBUTING/CHANGELOG.
- CHANGELOG: add the per-player setPlayer tokens (#47), brute-force lockout (#51),
  owner-scoped entity removal + bounded socket I/O (#54), and client token
  redaction (#55); cut [Unreleased] as [2.1.0].
- SECURITY.md: document per-session entity ownership (incl. bulk removal),
  max-blocks-per-tick, bounded socket I/O, enable-op-commands, and the setPlayer
  lockout.
- Version bump 2.0.0 -> 2.1.0 (pom, plugin.yml, client pyproject + __version__,
  bug-report template). plugin.yml: startup: postworld -> load: POSTWORLD (the
  former is not a recognized Bukkit key and was a silent no-op).

127 Java + 25 client tests still pass.
@sakebomb
sakebomb merged commit e2edde3 into master Aug 20, 2026
3 checks passed
@sakebomb
sakebomb deleted the docs/publish-readiness branch August 20, 2026 01:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant