Skip to content

Remove Problem Translate Button#947

Closed
def-WA2025 wants to merge 34 commits intomasterfrom
remove-problem-translate-button
Closed

Remove Problem Translate Button#947
def-WA2025 wants to merge 34 commits intomasterfrom
remove-problem-translate-button

Conversation

@def-WA2025
Copy link
Member

@def-WA2025 def-WA2025 commented Mar 15, 2026

What does this PR aim to accomplish?

Fix the title of the problem is not centered.

How does this PR accomplish the above?

Remove problem translate button.


By submitting this pull request, I confirm the following:

  1. I have read and understood the contributor's guide, as well as this entire template. I understand which branch to base my commits and Pull Requests against.
  2. I have commented on my proposed changes within the code.
  3. I have tested my changes.
  4. I am willing to help maintain this change if there are issues with it later.
  5. It is compatible with the GNU General Public License v3.0
  6. I have squashed any insignificant commits. (git rebase)
  7. I have checked that another pull request for this purpose does not exist.
  8. I have considered and confirmed that this submission will be valuable to others.
  9. I accept that this submission may not be used, and the pull request can be closed at the will of the maintainer.
  10. I give this submission freely and claim no ownership to its content.
  11. I have verified that my changes work correctly in both the new UI and the old/classic UI.

  • I have read the above and my PR is ready for review. Check this box to confirm

Summary by Sourcery

Remove problem translation controls, add optional image enlargement and contest problem list refresh capabilities, and refine several UI behaviors and texts.

New Features:

  • Introduce an optional image enlargement modal with zoom, pan, navigation, and download support for problem images.
  • Add a refreshable contest problem list in the problem switcher using a shared API helper.

Bug Fixes:

  • Hide the problem translation buttons on the problem page to fix layout issues with the problem title alignment.
  • Preserve selected problem ID, language, and result filters when re-rendering the status search form.
  • Correct a typo in the contest submission error message text.

Enhancements:

  • Gate contest rank list monochrome styling behind the MonochromeUI utility flag to respect user preferences.
  • Expose the new image enlargement capability as a configurable utility option in the UI.
  • Refactor contest problem list loading into a reusable helper to avoid duplicate logic.

Build:

  • Bump userscript and package versions for this release.

Summary by cubic

Removed the translate buttons on problem pages to fix the off‑center problem title and simplify the header. Also adds an optional image viewer and small UX improvements.

  • New Features

    • Image viewer (toggleable): click any image to open a modal with zoom, pan, reset, save; keyboard, wheel, and swipe support; ignores gravatar/cravatar; works for dynamic images.
    • Problem Switcher: added a “Refresh” link and centralized fetching via GetContestProblemList().
  • Bug Fixes

    • Removed #lang_cn_to_en and #lang_en_to_cn on problem pages to keep the title centered.
    • Contestrank pages: only apply black/white header styling when MonochromeUI is enabled.

Written for commit e509bb5. Summary will update on new commits.

PythonSmall-Q and others added 30 commits March 7, 2026 09:07
Introduce an ImageEnlarger utility: add a toggle option to the feature list and implement a modal image viewer with CSS, toolbar (zoom in/out, reset, save), keyboard shortcuts, and click-to-open behavior. Images are annotated with a preview class and the feature ignores gravatar/cravatar sources; it applies to existing and dynamically added images via a MutationObserver. Errors are logged and surface a DebugMode alert when enabled.
…rc, and MutationObserver performance

Co-authored-by: PythonSmall-Q <106425289+PythonSmall-Q@users.noreply.github.com>
Co-authored-by: PythonSmall-Q <106425289+PythonSmall-Q@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Shan Wenxiao <seanoj_noreply@yeah.net>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Shan Wenxiao <seanoj_noreply@yeah.net>
Fix ImageEnlarger: accessibility, modal re-entry, responsive images, MutationObserver perf
Co-authored-by: PythonSmall-Q <106425289+PythonSmall-Q@users.noreply.github.com>
Co-authored-by: PythonSmall-Q <106425289+PythonSmall-Q@users.noreply.github.com>
Co-authored-by: PythonSmall-Q <106425289+PythonSmall-Q@users.noreply.github.com>
Fix image viewer: broken pan, missing wheel zoom, download navigates instead of saving
Add ImageEnlarger feature with modal viewer
* Update Update.json

Signed-off-by: Zhu Chenrui <boomzero_zcr@outlook.com>

* Parse release notes from comment block

(cherry picked from commit c7137ff)

* Update bug.yml

Signed-off-by: Zhu Chenrui <boomzero_zcr@outlook.com>
(cherry picked from commit 07d7590)

Update feature.yml

Signed-off-by: Zhu Chenrui <boomzero_zcr@outlook.com>
(cherry picked from commit 1a99430)

Update docs.yml

Signed-off-by: Zhu Chenrui <boomzero_zcr@outlook.com>
(cherry picked from commit 6017bcf)

* Update GitHub Actions workflow to skip bot triggers

Signed-off-by: Shan Wenxiao <seanoj_noreply@yeah.net>

* Prevent UpdateVersion from running if last commit was by github-actions[bot]

This prevents infinite loops where the bot commits version updates,
which triggers the workflow again, causing another commit.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Allow metadata updates on edited PRs after bot version commit

The last-commit-author guard now only exits for non-edited events,
so PR title/body changes still update Update.json metadata even
when the branch tip is a github-actions[bot] commit.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Allow metadata updates on edited PRs after bot version commit

Exclude all bot actors (not just github-actions[bot]) from triggering
the UpdateVersion workflow, preventing loops from AI code review bots.
Allow edited events through the script-level guard so PR title/body
changes still update Update.json metadata.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix Problem Switcher Not Update

* Fix Problem Switcher Not Update

* 3.3.2

* Update version info to 3.3.2

* Fix Version List (1.999999.0 -> 1.10.0)

Signed-off-by: zsTree <wa2025666@gmail.com>

* Update time and description of 3.3.2

* Fix Problem Switcher Null Problem

Signed-off-by: zsTree <wa2025666@gmail.com>

* Update time and description of 3.3.2

* Fix XSS bug

Signed-off-by: zsTree <wa2025666@gmail.com>

* Update time and description of 3.3.2

---------

Signed-off-by: Zhu Chenrui <boomzero_zcr@outlook.com>
Signed-off-by: Shan Wenxiao <seanoj_noreply@yeah.net>
Signed-off-by: zsTree <wa2025666@gmail.com>
Co-authored-by: Zhu Chenrui <boomzero_zcr@outlook.com>
Co-authored-by: Shan Wenxiao <seanoj_noreply@yeah.net>
Co-authored-by: boomzero <thomas_rainbowfish@icloud.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Signed-off-by: zsTree <wa2025666@gmail.com>
Signed-off-by: zsTree <wa2025666@gmail.com>
Signed-off-by: zsTree <wa2025666@gmail.com>
Signed-off-by: zsTree <wa2025666@gmail.com>
Fixes #932. Header black/white forcing and inline style clearing on
contestrank-oi.php and contestrank-correct.php now only apply when
MonochromeUI is enabled. Badge ranks, color-coded cells, and auto-refresh
remain unconditional as part of the base UI.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@sourcery-ai
Copy link

sourcery-ai bot commented Mar 15, 2026

Reviewer's Guide

Removes the problem translate buttons to fix title centering, refactors contest problem list retrieval with a refreshable problem switcher, adds an image enlargement feature, improves status filter state handling, and gates ranklist monochrome styling behind the Monochrome UI setting while bumping script versions.

Sequence diagram for refreshed contest problem list and problem switcher

sequenceDiagram
  participant User
  participant Browser
  participant XMOJScript
  participant XMOJServer
  participant LocalStorage

  Note over Browser,XMOJScript: First visit to contest problem page
  XMOJScript->>LocalStorage: getItem(UserScript-Contest-cid-ProblemList)
  alt ProblemList_missing
    XMOJScript->>XMOJServer: GET /contest.php?cid=cid (via GetContestProblemList)
    XMOJServer-->>XMOJScript: HTML problemset table
    XMOJScript->>XMOJScript: Parse DOM and build problemList array
    XMOJScript->>LocalStorage: setItem(UserScript-Contest-cid-ProblemList, JSON)
  end
  XMOJScript->>Browser: Render problemSwitcher with problem buttons

  Note over User,Browser: User clicks refresh link in problem switcher
  User->>Browser: Click refreshList link
  Browser->>XMOJScript: Call GetContestProblemList(true)
  XMOJScript->>XMOJServer: GET /contest.php?cid=cid
  XMOJServer-->>XMOJScript: HTML updated problemset table
  XMOJScript->>XMOJScript: Parse rows to updated problemList
  XMOJScript->>LocalStorage: setItem(UserScript-Contest-cid-ProblemList, JSON)
  XMOJScript->>Browser: location.reload() to rebuild switcher from cache
Loading

Sequence diagram for new image enlargement feature

sequenceDiagram
  participant User
  participant Browser
  participant XMOJScript
  participant GM_xmlhttpRequest

  Note over Browser,XMOJScript: Page load
  XMOJScript->>Browser: Inject EnlargerStyle CSS
  XMOJScript->>Browser: Create hidden xmoj-image-modal and toolbar
  XMOJScript->>Browser: Scan all img elements
  XMOJScript->>Browser: Add xmoj-image-preview class and click handlers

  Note over User,Browser: Open image viewer
  User->>Browser: Click xmoj-image-preview image
  Browser->>XMOJScript: Image click handler
  XMOJScript->>Browser: Collect all xmoj-image-preview sources
  XMOJScript->>Browser: Set modal image src and show modal

  Note over User,Browser: Navigate and zoom
  User->>Browser: Click next or prev buttons
  Browser->>XMOJScript: Nav button handler
  XMOJScript->>Browser: Update CurrentImageIndex and modal image src
  User->>Browser: Use wheel or zoom buttons
  Browser->>XMOJScript: Zoom handler
  XMOJScript->>Browser: Apply transform translate(x,y) scale(zoom)

  Note over User,GM_xmlhttpRequest: Save current image
  User->>Browser: Click Save button
  Browser->>XMOJScript: Save handler
  XMOJScript->>GM_xmlhttpRequest: GET current image URL as blob
  GM_xmlhttpRequest-->>XMOJScript: Blob response
  XMOJScript->>Browser: Create object URL and temporary download link
  Browser->>User: Trigger file download

  Note over User,Browser: Close viewer
  User->>Browser: Click close button or background or press Escape
  Browser->>XMOJScript: Close handler
  XMOJScript->>Browser: Remove show class to hide modal
Loading

File-Level Changes

Change Details Files
Expose and reuse contest problem list fetching logic with a refreshable problem switcher UI.
  • Introduce unsafeWindow.GetContestProblemList to fetch and cache contest problems into localStorage, with optional page reload on refresh.
  • Replace inline contest problem list fetching on problem pages with a call to the shared GetContestProblemList helper.
  • Add a centered "刷新" link with .refreshList styling to allow users to manually refresh the cached contest problem list.
XMOJ.user.js
Remove problem translation buttons on the problem page to resolve layout/centering issues.
  • On /problem.php pages, locate translation button elements by id (lang_cn_to_en and lang_en_to_cn) and remove them before rendering MathJax and other UI features.
XMOJ.user.js
Add an image enlargement feature controlled by a new ImageEnlarger utility toggle.
  • Register a new "图片放大功能" (ImageEnlarger) toggle in the utilities/options list.
  • When enabled, inject styles and a fullscreen modal with zoom, pan, navigation, and save controls for images.
  • Attach click handlers to applicable images (excluding avatar providers) to open them in the modal, and observe DOM mutations to handle dynamically added images.
  • Implement robust image download via GM_xmlhttpRequest with a blob URL fallback.
XMOJ.user.js
Improve status filter form behavior under the NewBootstrap UI.
  • Extract current problem_id, language, and jresult from the URL with numeric validation before reconstructing the status search form.
  • Remove hard-coded selected attributes from "全部" options and programmatically set select values based on parsed URL parameters after rendering the form.
XMOJ.user.js
Make ranklist monochrome styling conditional on the MonochromeUI utility and correct a minor Chinese message typo.
  • Wrap header cell color overrides and row color resets in ranklist processing in UtilityEnabled("MonochromeUI") checks so colors only change when that feature is enabled.
  • Fix the Chinese string and log message from "像题目" to "向题目" when submitting after contest end.
XMOJ.user.js
Version and metadata updates for the userscript and package.
  • Bump the @Version field in XMOJ.user.js from 3.3.0 to 3.3.5.
  • Update package.json version from 3.3.0 to 3.3.4 and keep Update.json in sync (diff not shown).
XMOJ.user.js
package.json
Update.json

Possibly linked issues

  • #: PR removes translation buttons on problem page, which fixes the crooked/misaligned bilingual problem title reported.

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@hendragon-bot hendragon-bot bot added the user-script This issue or pull request is related to the main user script label Mar 15, 2026
@github-actions
Copy link
Contributor

请向dev分支提交pull request, 本pull request将被自动关闭

@github-actions github-actions bot closed this Mar 15, 2026
@github-actions
Copy link
Contributor

请向dev分支提交pull request, 本pull request将被自动关闭

1 similar comment
@github-actions
Copy link
Contributor

请向dev分支提交pull request, 本pull request将被自动关闭

@def-WA2025
Copy link
Member Author

似乎又提交到master了(

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

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

Hey - I've found 3 security issues, 1 other issue, and left some high level feedback:

Security issues:

  • User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities (link)
  • User controlled data in a problemSwitcher.innerHTML is an anti-pattern that can lead to XSS vulnerabilities (link)
  • User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities (link)

General comments:

  • The version numbers are inconsistent (@version 3.3.5 in XMOJ.user.js vs 3.3.4 in package.json); consider aligning them to avoid confusion in tooling and updates.
  • Instead of exposing GetContestProblemList on unsafeWindow and calling it from an inline onclick string, consider wiring up the refresh click handler via addEventListener on the created element to avoid global pollution and string-based handlers.
  • The .refreshList styles are defined twice in different CSS blocks; consider consolidating these into a single definition to keep the styling easier to maintain.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- The version numbers are inconsistent (`@version 3.3.5` in `XMOJ.user.js` vs `3.3.4` in `package.json`); consider aligning them to avoid confusion in tooling and updates.
- Instead of exposing `GetContestProblemList` on `unsafeWindow` and calling it from an inline `onclick` string, consider wiring up the refresh click handler via `addEventListener` on the created element to avoid global pollution and string-based handlers.
- The `.refreshList` styles are defined twice in different CSS blocks; consider consolidating these into a single definition to keep the styling easier to maintain.

## Individual Comments

### Comment 1
<location path="XMOJ.user.js" line_range="2282-2283" />
<code_context>
                 } else if (location.pathname == "/problem.php") {
+                    let transZhEn = document.getElementById("lang_cn_to_en");
+                    let transEnZh = document.getElementById("lang_en_to_cn");
+                    if (transZhEn !== null) await transZhEn.remove();
+                    if (transEnZh !== null) await transEnZh.remove();
+
                     await RenderMathJax();
</code_context>
<issue_to_address>
**nitpick:** `await` on synchronous `remove()` calls is unnecessary.

`Element.prototype.remove()` is synchronous and not Promise-based, so `await` is a no-op here. Please remove `await` from both `transZhEn.remove()` and `transEnZh.remove()`.
</issue_to_address>

### Comment 2
<location path="XMOJ.user.js" line_range="2335" />
<code_context>
                        problemSwitcher.innerHTML += `<a onclick="GetContestProblemList(true)" title="刷新列表" class="refreshList mb-2" style="text-align: center;" active>刷新</a>`;
</code_context>
<issue_to_address>
**security (javascript.browser.security.insecure-document-method):** User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities

*Source: opengrep*
</issue_to_address>

### Comment 3
<location path="XMOJ.user.js" line_range="2335" />
<code_context>
                        problemSwitcher.innerHTML += `<a onclick="GetContestProblemList(true)" title="刷新列表" class="refreshList mb-2" style="text-align: center;" active>刷新</a>`;
</code_context>
<issue_to_address>
**security (javascript.browser.security.insecure-innerhtml):** User controlled data in a `problemSwitcher.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities

*Source: opengrep*
</issue_to_address>

### Comment 4
<location path="XMOJ.user.js" line_range="2548-2550" />
<code_context>
                            document.querySelector("#simform").outerHTML = `<form id="simform" class="justify-content-center form-inline row g-2" action="status.php" method="get" style="padding-bottom: 7px;">
                    <input class="form-control" type="text" size="4" name="user_id" value="${CurrentUsername} "style="display: none;">
                <div class="col-md-1">
                    <label for="problem_id" class="form-label">题目编号</label>
                    <input type="text" class="form-control" id="problem_id" name="problem_id" size="4">
                </div>
                <div class="col-md-1">
                    <label for="language" class="form-label">语言</label>
                    <select id="language" name="language" class="form-select">
                        <option value="-1">全部</option>
                        <option value="0">C</option>
                        <option value="1">C++</option>
                        <option value="2">Pascal</option>
                    </select>
                </div><div class="col-md-1">
                    <label for="jresult" class="form-label">结果</label>
                    <select id="jresult" name="jresult" class="form-select">
                        <option value="-1">全部</option>
                        <option value="4">正确</option>
                        <option value="5">格式错误</option>
                        <option value="6">答案错误</option>
                        <option value="7">时间超限</option>
                        <option value="8">内存超限</option>
                        <option value="9">输出超限</option>
                        <option value="10">运行错误</option>
                        <option value="11">编译错误</option>
                        <option value="0">等待</option>
                        <option value="1">等待重判</option>
                        <option value="2">编译中</option>
                        <option value="3">运行并评判</option>
                    </select>
                </div>
                <div class="col-md-1">
                    <button type="submit" class="btn btn-primary">查找</button>
                </div><div id="csrf"></div></form>`;
</code_context>
<issue_to_address>
**security (javascript.browser.security.insecure-document-method):** User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities

*Source: opengrep*
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment on lines +2282 to +2283
if (transZhEn !== null) await transZhEn.remove();
if (transEnZh !== null) await transEnZh.remove();
Copy link

Choose a reason for hiding this comment

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

nitpick: await on synchronous remove() calls is unnecessary.

Element.prototype.remove() is synchronous and not Promise-based, so await is a no-op here. Please remove await from both transZhEn.remove() and transEnZh.remove().

problemSwitcher.style.flexDirection = "column";

let problemList = JSON.parse(ContestProblemList);
problemSwitcher.innerHTML += `<a onclick="GetContestProblemList(true)" title="刷新列表" class="refreshList mb-2" style="text-align: center;" active>刷新</a>`;
Copy link

Choose a reason for hiding this comment

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

security (javascript.browser.security.insecure-document-method): User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities

Source: opengrep

problemSwitcher.style.flexDirection = "column";

let problemList = JSON.parse(ContestProblemList);
problemSwitcher.innerHTML += `<a onclick="GetContestProblemList(true)" title="刷新列表" class="refreshList mb-2" style="text-align: center;" active>刷新</a>`;
Copy link

Choose a reason for hiding this comment

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

security (javascript.browser.security.insecure-innerhtml): User controlled data in a problemSwitcher.innerHTML is an anti-pattern that can lead to XSS vulnerabilities

Source: opengrep

Comment on lines 2548 to 2550
document.querySelector("#simform").outerHTML = `<form id="simform" class="justify-content-center form-inline row g-2" action="status.php" method="get" style="padding-bottom: 7px;">
<input class="form-control" type="text" size="4" name="user_id" value="${CurrentUsername} "style="display: none;">
<div class="col-md-1">
Copy link

Choose a reason for hiding this comment

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

security (javascript.browser.security.insecure-document-method): User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities

Source: opengrep

Copy link

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

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

2 issues found across 3 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="Update.json">

<violation number="1" location="Update.json:3459">
P1: Update.json still stops at 3.3.4 even though the userscript version is already 3.3.5, so the version/release scripts will reject this state.</violation>
</file>

<file name="package.json">

<violation number="1" location="package.json:3">
P1: Do not manually bump `package.json` here; this repository's version is generated by automation and must stay in sync with `XMOJ.user.js` and `Update.json`. A package-only bump leaves version metadata inconsistent.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

],
"Notes": "Display status.php query content."
},
"3.3.4": {
Copy link

@cubic-dev-ai cubic-dev-ai bot Mar 15, 2026

Choose a reason for hiding this comment

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

P1: Update.json still stops at 3.3.4 even though the userscript version is already 3.3.5, so the version/release scripts will reject this state.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At Update.json, line 3459:

<comment>Update.json still stops at 3.3.4 even though the userscript version is already 3.3.5, so the version/release scripts will reject this state.</comment>

<file context>
@@ -3422,6 +3422,50 @@
+            ],
+            "Notes": "Display status.php query content."
+        },
+        "3.3.4": {
+            "UpdateDate": 1773559861504,
+            "Prerelease": true,
</file context>
Fix with Cubic

{
"name": "xmoj-script",
"version": "3.3.0",
"version": "3.3.4",
Copy link

@cubic-dev-ai cubic-dev-ai bot Mar 15, 2026

Choose a reason for hiding this comment

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

P1: Do not manually bump package.json here; this repository's version is generated by automation and must stay in sync with XMOJ.user.js and Update.json. A package-only bump leaves version metadata inconsistent.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At package.json, line 3:

<comment>Do not manually bump `package.json` here; this repository's version is generated by automation and must stay in sync with `XMOJ.user.js` and `Update.json`. A package-only bump leaves version metadata inconsistent.</comment>

<file context>
@@ -1,6 +1,6 @@
 {
   "name": "xmoj-script",
-  "version": "3.3.0",
+  "version": "3.3.4",
   "description": "an improvement script for xmoj.tech",
   "main": "AddonScript.js",
</file context>
Fix with Cubic

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/XL user-script This issue or pull request is related to the main user script

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants