Skip to content

Prevent disabled configured vote sites from being auto-enabled - #1546

Closed
BenCodez wants to merge 22 commits into
masterfrom
codex/review-pr-response
Closed

Prevent disabled configured vote sites from being auto-enabled#1546
BenCodez wants to merge 22 commits into
masterfrom
codex/review-pr-response

Conversation

@BenCodez

@BenCodez BenCodez commented Aug 8, 2026

Copy link
Copy Markdown
Owner

Motivation

A refactor made VoteSiteManager resolve names only from the in-memory voteSites list, which contains enabled/loadable sites. Disabled-but-configured sites could therefore appear missing during vote ingestion and be auto-created into the same section with Enabled: true.

Changes

  • Added a non-validating raw configured-site lookup that returns only real VoteSites configuration sections.
  • Updated VoteSiteManager.getVoteSiteName(false, ...) to recognize disabled configured sites by:
    • exact key;
    • normalized key (for example, example.comexample_com);
    • non-empty ServiceSite;
    • non-empty display name.
  • Made hasVoteSite(...) null-safe and aware of configured-but-disabled sites so auto-creation cannot overwrite and re-enable them.
  • Added a guard for queued offline votes so a disabled or otherwise unavailable site is skipped instead of passing null to reward processing.
  • Added regression coverage for disabled configured aliases, normalized generated keys, null identifiers, enabled-only lookup behavior, and prevention of tryGenerateVoteSite(...) calls.

Verification

  • Merged current master into the PR branch and resolved the branch conflict without replacing newer proxy or build changes from master.
  • GitHub Actions Java CI with Maven run Discord intergration #392 passed on JDK 21.
  • The latest Codex feature review found no major issues, and all inline review threads are resolved.

AI disclosure

This pull request was created with assistance from OpenAI Codex and reviewed by BenCodez.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0ae6645c76

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

BenCodez commented Aug 9, 2026

Copy link
Copy Markdown
Owner Author

@codex address the unresolved P2 review feedback. Fix the disabled-configured vote-site path so offline queued votes for a site disabled after queueing are skipped safely without passing null into playerVote(), while preserving the intended prevention of auto-creation/re-enabling. Add or update regression coverage for player-login/offline-vote processing and run the relevant checks.

@chatgpt-codex-connector

Copy link
Copy Markdown

Summary

Testing

  • git diff --cached --check
  • ⚠️ mvn -Dtest=VotingPluginUserOfflineVoteTest,VoteSiteManagerTest test (Maven Central returned HTTP 403 while resolving maven-resources-plugin:3.3.1, so the tests could not execute in this environment.)
  • ⚠️ make_pr --title "Skip disabled sites during offline vote processing" --body ... (the required PR-creation tool is not installed or exposed in this environment.)
  • git status --short --branch (clean working tree after commit.)

View task →

BenCodez commented Aug 9, 2026

Copy link
Copy Markdown
Owner Author

Implemented the Codex finding directly: offline queued votes now resolve the enabled site once, skip disabled sites safely, and never pass null into playerVote(). @codex review the new commit.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Can't wait for the next one!

Reviewed commit: 8370a4e3ef

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2ef79399cf

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c2865c2467

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1637784fbb

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copy link
Copy Markdown
Owner Author

@codex review the current head after the added disabled-site regression tests. Please verify the offline queued-vote null guard, raw configured-site lookup, malformed configuration handling, normalized-key matching, and whether this PR is ready.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. You're on a roll.

Reviewed commit: ef057f3a51

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copy link
Copy Markdown
Owner Author

@codex review the current head after merging current master. Please verify that the conflict resolution preserved the disabled-site fix, the queued-offline-vote null guard, malformed/non-section handling, normalized-key matching, empty-identifier handling, and compatibility with the newer proxy changes. Confirm whether the PR is ready to merge.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Bravo.

Reviewed commit: 9be431758b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copy link
Copy Markdown
Owner Author

@codex clean up the unintended whole-file line-ending churn in ConfigVoteSites.java and VotingPluginUser.java. Restore each file's line endings to match current master while preserving only the intended semantic additions (getRawVoteSiteNames() and the disabled/offline-site null guard). Do not change behavior or the other two feature files. Run the relevant Maven checks and push the cleanup to this PR branch.

@chatgpt-codex-connector

Copy link
Copy Markdown

Summary

Testing

  • python3 - <<'PY' ... — verified both edited files use CRLF exclusively and match the base commit’s line-ending style.
  • git diff --ignore-space-at-eol --stat 6867c4880631f0c9e140a27279d26d708876a96b..HEAD -- VotingPlugin/src/main/java/com/bencodez/votingplugin/config/ConfigVoteSites.java VotingPlugin/src/main/java/com/bencodez/votingplugin/user/VotingPluginUser.java — cumulative semantic diff is limited to 15 insertions and 2 deletions for the two intended additions.
  • git diff-tree --no-commit-id --name-only -r HEAD — confirmed the cleanup commit changes only ConfigVoteSites.java and VotingPluginUser.java.
  • git status --short --branch — clean working tree after commit.
  • ⚠️ mvn -Dtest=VoteSiteManagerTest,VotingPluginUserOfflineVoteTest test — could not run from the repository root because the Maven project is in the nested VotingPlugin directory.
  • ⚠️ mvn -Dtest=VoteSiteManagerTest,VotingPluginUserOfflineVoteTest test (from /workspace/VotingPlugin/VotingPlugin) — Maven Central returned HTTP 403 while resolving maven-resources-plugin:3.3.1, so the relevant tests could not execute in this environment.

View task →

Copy link
Copy Markdown
Owner Author

@codex Do not modify or attempt to push the PR. Recreate the verified CRLF cleanup from current branch head for only these two files, preserving all semantic changes:

  • VotingPlugin/src/main/java/com/bencodez/votingplugin/config/ConfigVoteSites.java
  • VotingPlugin/src/main/java/com/bencodez/votingplugin/user/VotingPluginUser.java

Then post the following machine-readable values in one comment, with no truncation and no Markdown wrapping around the base64 values:

  • CONFIG_GZIP_BASE64= followed by gzip -n -9 compressed file bytes encoded using single-line base64
  • USER_GZIP_BASE64= followed by the same for the user file
  • CONFIG_GIT_BLOB_SHA= from git hash-object on the cleaned config file
  • USER_GIT_BLOB_SHA= from git hash-object on the cleaned user file

Also state the byte length of each uncompressed file. The compressed payload is needed because your isolated checkout cannot push.

@chatgpt-codex-connector

Copy link
Copy Markdown

CONFIG_GZIP_BASE64=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
USER_GZIP_BASE64=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
CONFIG_GIT_BLOB_SHA=3c75019562b4b8c0b5711ce5f39a1f5a26e1270c
USER_GIT_BLOB_SHA=596a5f4bd4ee17d3cec3fb60226120905f2c3454
CONFIG_UNCOMPRESSED_BYTES=17816
USER_UNCOMPRESSED_BYTES=57443

View task →

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3e92dd65af

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +47 to +48
run(repository, "git", "fetch", "origin", BRANCH);
run(repository, "git", "checkout", "-B", BRANCH, "origin/" + BRANCH);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Serialize the two branch-cleanup writers

When this push workflow finishes before the pull-request Maven build reaches this test, it has already converted both source files and removed .github/workflows/pr1546-line-ending-cleanup.yml; this fetch/reset therefore picks up that cleanup commit, leaving only this test's deletion staged. The assertion below still requires all four paths, so the Java CI build fails and the self-removing test remains on the PR branch. Use a single cleanup mechanism or coordinate the workflow and test rather than letting both mutate the same branch concurrently.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d72e62f203

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +24 to +26
with:
ref: ${{ github.head_ref || github.ref_name }}
fetch-depth: 0

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep fork pull requests on a fetchable checkout ref

For a pull request from a fork, github.head_ref contains only the fork's branch name, while actions/checkout still fetches from the base github.repository because no repository input is supplied. Unless the base repository happens to have an identically named branch, checkout fails before Maven runs, blocking CI for external contributors. Keep the default pull-request checkout for ordinary builds, or provide both the head repository and an appropriate ref.

Useful? React with 👍 / 👎.

@BenCodez BenCodez closed this Aug 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant