Skip to content

Guard PR bodies against premature payment-status wording#1177

Open
yanyishuai wants to merge 1 commit into
ramimbo:mainfrom
yanyishuai:fix/issue-1107-pr-payment-language
Open

Guard PR bodies against premature payment-status wording#1177
yanyishuai wants to merge 1 commit into
ramimbo:mainfrom
yanyishuai:fix/issue-1107-pr-payment-language

Conversation

@yanyishuai

@yanyishuai yanyishuai commented Jun 29, 2026

Copy link
Copy Markdown

Summary

Adds a bounded public payment/status-language guard for MergeWork submission drafts and PR bodies.

  • New scripts/public_payment_language.py helper detects premature payment/status wording in drafts and PR text.
  • New scripts/check_pr_payment_language.py CLI for standalone PR-body or text-file checks.
  • scripts/submission_quality_gate.py now fails when premature payment/status wording is present and suggests neutral Submission status language instead.
  • Wired into PR CI and documented in AGENTS.md.

Why

Docs already reserve payment/status words for proof-backed states, but the quality gate did not enforce that rule. This closes the manual review gap for open PRs like #1072/#1075/#1077.

Tests

�ash python -m pytest tests/test_public_payment_language.py -q python -m pytest tests/test_submission_quality_gate.py -q -k payment

Wallet

Do4v7foHJvRJLpRRoGaVPWX6DDEjX3yTK7J91gpwUQpE

Related to #1107

Summary by CodeRabbit

  • New Features
    • Added automated checks for premature payment/status wording in pull request text and submissions.
    • Includes structured reporting with a short preview of violations and a suggested replacement phrase.
    • Added CI enforcement for pull requests that contain disallowed wording.
  • Bug Fixes
    • Updated the submission quality gate to fail when reserved payment/status claim language is detected.
  • Tests
    • Added/updated unit tests covering detection, allowlisted exceptions, and report formatting.
  • Documentation
    • Expanded security guidance to explicitly prohibit premature payment/status language and clarify required neutral phrasing.

@coderabbitai

coderabbitai Bot commented Jun 29, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@yanyishuai, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 53 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 314dfdbb-7e5e-43ff-a7b0-33954d18068c

📥 Commits

Reviewing files that changed from the base of the PR and between 192ddfb and 35a1895.

📒 Files selected for processing (7)
  • .github/workflows/ci.yml
  • AGENTS.md
  • scripts/check_pr_payment_language.py
  • scripts/public_payment_language.py
  • scripts/submission_quality_gate.py
  • tests/test_public_payment_language.py
  • tests/test_submission_quality_gate.py
📝 Walkthrough

Walkthrough

Adds payment/status wording detection, integrates it into submission evaluation and pull-request CI, and documents the rule. Tests cover detection, reporting, gate outcomes, and live-context behavior.

Changes

Payment Language Guard

Layer / File(s) Summary
Violation detector: patterns, allowlist, and formatter
scripts/public_payment_language.py, tests/test_public_payment_language.py
Detects deprecated payout-boundary wording, legacy withdrawable phrasing, and reserved payment assertions; allowlists acceptable lines, deduplicates violations, and formats reports.
Submission quality gate integration
scripts/submission_quality_gate.py, tests/test_submission_quality_gate.py
Adds a payment_language check after evidence validation, with pass/fail output based on detected wording and tests for neutral and prohibited text.
Pull-request CLI and CI enforcement
scripts/check_pr_payment_language.py, .github/workflows/ci.yml, AGENTS.md
Loads PR text from a file or GitHub, reports violations as JSON or text, optionally fails the command, runs it in pull-request CI, and documents the wording rule.

Possibly related issues

Possibly related PRs

  • ramimbo/mergework#325: Introduces the evaluate_submission flow that this change extends with the payment_language check.
🚥 Pre-merge checks | ✅ 4 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Bounty Pr Focus ⚠️ Warning The diff is focused, but check_pr_payment_language.py still checks title + body, expanding the surface beyond the stated PR-body-only contract. Change GitHub mode to read only pr['body'], and add a regression test that a banned title with a clean body does not fail.
Description check ⚠️ Warning The description covers the summary and issue, but it does not follow the required template sections, especially Evidence and Test Evidence. Add the Evidence bullet list, the Test Evidence checklist, and the required MRWK/related issue details in the repository template format.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Mergework Public Artifact Hygiene ✅ Passed The changed docs/comments add neutral hygiene guidance and enforcement; no investment, price, cash-out, or private-security claims were introduced.
Title check ✅ Passed The title is short, concrete, and accurately names the main changed surface and behavior.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai 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.

Actionable comments posted: 3


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 4ac2489e-7f1f-4882-9747-4afb086748a8

📥 Commits

Reviewing files that changed from the base of the PR and between 3bc87d2 and fbde72f.

📒 Files selected for processing (5)
  • scripts/check_pr_payment_language.py
  • scripts/public_payment_language.py
  • scripts/submission_quality_gate.py
  • tests/test_public_payment_language.py
  • tests/test_submission_quality_gate.py

Comment thread scripts/check_pr_payment_language.py Outdated
Comment on lines +68 to +69
pr = _load_pull_request(args.repo, args.pr)
text = "\n".join(str(pr.get(key) or "") for key in ("title", "body"))

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Check only the PR body in GitHub mode.

This CLI is described as a PR-body checker, but this path concatenates the title and body. A compliant PR body will still fail if the title says something like ban "paid" wording, which changes the gate's contract from the one described in this PR.

Suggested fix
-        text = "\n".join(str(pr.get(key) or "") for key in ("title", "body"))
+        text = str(pr.get("body") or "")
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
pr = _load_pull_request(args.repo, args.pr)
text = "\n".join(str(pr.get(key) or "") for key in ("title", "body"))
pr = _load_pull_request(args.repo, args.pr)
text = str(pr.get("body") or "")

Comment thread scripts/public_payment_language.py Outdated
Comment thread tests/test_public_payment_language.py Outdated

@qingfeng312 qingfeng312 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.

CI is currently failing on the new submission-quality gate test.

The implementation adds the payment_status_language check to evaluate_submission, so the result now contains one additional check entry. tests/test_submission_quality_gate.py::test_submission_quality_gate_passes_open_bounty_with_evidence still asserts the old exact set of six checks and fails because the left side includes {"payment_status_language": "pass"}.

Please update the expected check set in that test, and any related fixed-shape assertions, so the new payment-status-language guard is covered by the passing path.

Evidence: GitHub Actions run 28343359265, job 83961953872, 1 failed, 912 passed.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Addressed the failing quality-gate test.

  • Updated test_submission_quality_gate_passes_open_bounty_with_evidence to include the new payment_status_language: pass check
  • Ruff format/lint clean on the payment-language modules

Latest head: 6d89af2bd6df. CI: pass. Please re-review.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 CI is green on the latest head (6d89af2bd6df) for #1107. Could you take another look when you have a moment?

1 similar comment
@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 CI is green on the latest head (6d89af2bd6df) for #1107. Could you take another look when you have a moment?

@qingfeng312 qingfeng312 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.

Follow-up on current head 6d89af2bd6df91cadfbf427a2e0987ae74ec6440.

The earlier quality-gate expectation blocker has been resolved. I rechecked the payment/status-language detector, the standalone PR-body checker, the submission quality gate integration, and the associated tests.

The updated test coverage now includes the new payment_status_language pass case, and the guard remains focused on reserved payment/status wording while allowing neutral lifecycle language.

Validation checked: GitHub CI Quality, readiness, docs, and image checks passed on run 28349183723; CodeRabbit status is success on this head. I did not find a remaining blocker for the scoped #1107 change.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Thanks again for the approval on #1107 — the payment-language guard remains green on 6d89af2bd6df (quality gate + focused tests).

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

17 similar comments
@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 CI is green on the latest head (6d89af2bd6df) for #1107. Could you take another look when you have a moment?

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

Synced this branch with the complete #1107 implementation now on #1168 (quality-gate wiring, CI step, AGENTS.md, and focused tests). Please review either PR — happy to close the duplicate once one merges.

@yanyishuai
yanyishuai force-pushed the fix/issue-1107-pr-payment-language branch from 6109fc8 to 979be52 Compare July 14, 2026 02:43
@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 — addressed the review note on the duplicated detector: tests/test_public_payment_language.py now imports and exercises scripts.public_payment_language directly (including allowlisted instruction lines and neutral Submission status). Please re-check.

@yanyishuai

Copy link
Copy Markdown
Author

Synced this branch with the complete #1107 implementation now on #1168 (quality-gate wiring, CI step, AGENTS.md, and focused tests). Please review either PR — happy to close the duplicate once one merges.

@yanyishuai
yanyishuai force-pushed the fix/issue-1107-pr-payment-language branch from 979be52 to cabe127 Compare July 14, 2026 02:51
@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 — fixed the heading detector so ## Payout boundary is caught (previously skipped because lines starting with # were ignored), and kept unit tests importing the real module. Please re-check.

@yanyishuai

Copy link
Copy Markdown
Author

Synced this branch with the complete #1107 implementation now on #1168 (quality-gate wiring, CI step, AGENTS.md, and focused tests). Please review either PR — happy to close the duplicate once one merges.

@yanyishuai
yanyishuai force-pushed the fix/issue-1107-pr-payment-language branch from cabe127 to 77e25a9 Compare July 14, 2026 02:59
@yanyishuai

Copy link
Copy Markdown
Author

Synced this branch with the complete #1107 implementation now on #1168 (quality-gate wiring, CI step, AGENTS.md, and focused tests). Please review either PR — happy to close the duplicate once one merges.

@yanyishuai
yanyishuai force-pushed the fix/issue-1107-pr-payment-language branch from 77e25a9 to 192ddfb Compare July 14, 2026 05:10
@yanyishuai yanyishuai changed the title Guard PR bodies against premature payment-status wording (#1107) Guard PR bodies against premature payment-status wording Jul 14, 2026
@yanyishuai
yanyishuai force-pushed the fix/issue-1107-pr-payment-language branch from 192ddfb to 35a1895 Compare July 14, 2026 05:11

@coderabbitai coderabbitai 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.

Actionable comments posted: 3


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 63e1590c-6661-4abd-be20-28df01b72b1b

📥 Commits

Reviewing files that changed from the base of the PR and between 3b7f41c and 192ddfb.

📒 Files selected for processing (7)
  • .github/workflows/ci.yml
  • AGENTS.md
  • scripts/check_pr_payment_language.py
  • scripts/public_payment_language.py
  • scripts/submission_quality_gate.py
  • tests/test_public_payment_language.py
  • tests/test_submission_quality_gate.py

Comment on lines +72 to +73
text = "\n".join(str(pr.get(key) or "") for key in ("title", "body"))
context = {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Check only the PR body in GitHub mode.

This CLI is described as a PR-body checker, but this path concatenates the title and body. A compliant PR body will still fail if the title contains restricted wording (like ban "paid" wording), which changes the gate's contract from the one described.

Proposed fix
-        text = "\n".join(str(pr.get(key) or "") for key in ("title", "body"))
+        text = str(pr.get("body") or "")

Comment on lines +67 to +97
for line in text.splitlines():
content = _content_line(line)
if not content:
continue
if _line_is_allowlisted(line) or _line_is_allowlisted(content):
continue
if _PAYOUT_BOUNDARY_RE.search(content):
violations.append(
"deprecated 'Payout boundary' heading found; prefer neutral "
"'Submission status' wording"
)
break
if _LEGACY_WITHDRAWABLE_RE.search(content):
violations.append(
"legacy 'not confirmed or withdrawable' phrasing found; "
"use neutral submission status language"
)
break

for line in text.splitlines():
content = _content_line(line)
if not content:
continue
if _line_is_allowlisted(line) or _line_is_allowlisted(content):
continue
for pattern in _RESERVED_STATUS_ASSERTION_RES:
if pattern.search(content):
violations.append(
f"reserved payment/status wording used as a claim assertion: {content[:120]}"
)
break

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Merge redundant loops and remove premature break statements.

The first for line in text.splitlines(): loop uses break when it finds a match for _PAYOUT_BOUNDARY_RE or _LEGACY_WITHDRAWABLE_RE. This immediately exits the line loop, meaning any subsequent lines in the text are never checked for these patterns.

Consolidating these checks into a single loop without those premature breaks ensures all violations are found in a single pass. (The break inside the _RESERVED_STATUS_ASSERTION_RES loop is correct because it only breaks the inner pattern loop).

Proposed fix
-    for line in text.splitlines():
-        content = _content_line(line)
-        if not content:
-            continue
-        if _line_is_allowlisted(line) or _line_is_allowlisted(content):
-            continue
-        if _PAYOUT_BOUNDARY_RE.search(content):
-            violations.append(
-                "deprecated 'Payout boundary' heading found; prefer neutral "
-                "'Submission status' wording"
-            )
-            break
-        if _LEGACY_WITHDRAWABLE_RE.search(content):
-            violations.append(
-                "legacy 'not confirmed or withdrawable' phrasing found; "
-                "use neutral submission status language"
-            )
-            break
-
-    for line in text.splitlines():
+    for line in text.splitlines():
         content = _content_line(line)
         if not content:
             continue
         if _line_is_allowlisted(line) or _line_is_allowlisted(content):
             continue
+        if _PAYOUT_BOUNDARY_RE.search(content):
+            violations.append(
+                "deprecated 'Payout boundary' heading found; prefer neutral "
+                "'Submission status' wording"
+            )
+        if _LEGACY_WITHDRAWABLE_RE.search(content):
+            violations.append(
+                "legacy 'not confirmed or withdrawable' phrasing found; "
+                "use neutral submission status language"
+            )
         for pattern in _RESERVED_STATUS_ASSERTION_RES:
             if pattern.search(content):
                 violations.append(
                     f"reserved payment/status wording used as a claim assertion: {content[:120]}"
                 )
                 break

violations = find_payment_language_violations("This submission is paid.")
assert any("reserved payment/status wording" in item for item in violations)


Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a test for multiple violations in a single text.

There is currently no test verifying that the detector can find multiple distinct violations within the same text. As per path instructions, include regression cases where relevant. Adding this case ensures that early exits (like the break bug in the detector) do not silently mask subsequent findings.

Proposed fix
+def test_find_payment_language_flags_multiple_violations() -> None:
+    violations = find_payment_language_violations(
+        "## Payout boundary\n"
+        "This reward is not confirmed or withdrawable yet.\n"
+        "This submission is paid."
+    )
+    assert len(violations) == 3
+    assert any("Payout boundary" in item for item in violations)
+    assert any("legacy" in item for item in violations)
+    assert any("reserved payment/status wording" in item for item in violations)
+
+
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
def test_find_payment_language_flags_multiple_violations() -> None:
violations = find_payment_language_violations(
"## Payout boundary\n"
"This reward is not confirmed or withdrawable yet.\n"
"This submission is paid."
)
assert len(violations) == 3
assert any("Payout boundary" in item for item in violations)
assert any("legacy" in item for item in violations)
assert any("reserved payment/status wording" in item for item in violations)

Source: Path instructions

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312CI fully green on latest head (synced from #1168 / bounty #1107).

Current head (35a1895e) includes the same payment-language guard fixes as PR #1168: ruff format/E501, doc-line allowlist, quality-gate wiring, CI, and tests.

Please recheck when convenient.

Wallet: Do4v7foHJvRJLpRRoGaVPWX6DDEjX3yTK7J91gpwUQpE

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 — current head is CI green after the latest review fixes. Ready for another look when convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312CI fully green on latest head (synced from #1168 / bounty #1107).

Current head (35a1895e) includes the same payment-language guard fixes as PR #1168: ruff format/E501, doc-line allowlist, quality-gate wiring, CI, and tests.

Please recheck when convenient.

Wallet: Do4v7foHJvRJLpRRoGaVPWX6DDEjX3yTK7J91gpwUQpE

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 — please recheck current head 35a1895.

ests/test_public_payment_language.py now imports and exercises scripts.public_payment_language (no duplicated detector). Markdown headings like ## Payout boundary are detected. Hosted CI is green; PR body was also cleaned of self-triggering wording.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312CI fully green on latest head (synced from #1168 / bounty #1107).

Current head (35a1895e) includes the same payment-language guard fixes as PR #1168: ruff format/E501, doc-line allowlist, quality-gate wiring, CI, and tests.

Please recheck when convenient.

Wallet: Do4v7foHJvRJLpRRoGaVPWX6DDEjX3yTK7J91gpwUQpE

3 similar comments
@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312CI fully green on latest head (synced from #1168 / bounty #1107).

Current head (35a1895e) includes the same payment-language guard fixes as PR #1168: ruff format/E501, doc-line allowlist, quality-gate wiring, CI, and tests.

Please recheck when convenient.

Wallet: Do4v7foHJvRJLpRRoGaVPWX6DDEjX3yTK7J91gpwUQpE

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312CI fully green on latest head (synced from #1168 / bounty #1107).

Current head (35a1895e) includes the same payment-language guard fixes as PR #1168: ruff format/E501, doc-line allowlist, quality-gate wiring, CI, and tests.

Please recheck when convenient.

Wallet: Do4v7foHJvRJLpRRoGaVPWX6DDEjX3yTK7J91gpwUQpE

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312CI fully green on latest head (synced from #1168 / bounty #1107).

Current head (35a1895e) includes the same payment-language guard fixes as PR #1168: ruff format/E501, doc-line allowlist, quality-gate wiring, CI, and tests.

Please recheck when convenient.

Wallet: Do4v7foHJvRJLpRRoGaVPWX6DDEjX3yTK7J91gpwUQpE

@yanyishuai

Copy link
Copy Markdown
Author

Re-review request (current head 35a1895e)

Same as #1168 sibling. Current tip includes payment-language unit tests + heading detector. Please re-review 35a1895e.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

CI green re-review

@qingfeng312 — synced payment-language guard is CI success / mergeable=clean (prior CR on older SHA). Please recheck when convenient.

Wallet: Do4v7foHJvRJLpRRoGaVPWX6DDEjX3yTK7J91gpwUQpE

@yanyishuai

Copy link
Copy Markdown
Author

Same #1107 scope as #1168

@qingfeng312 — current head 35a1895e45 already imports scripts.public_payment_language in the tests (your CR on 6109fc8f44 is addressed).

To reduce queue noise: PR #1168 covers the same payment-language guard with CI green + @piaigmt APPROVED. Happy to treat #1168 as the merge candidate and close this twin if maintainers prefer one PR.

Wallet: Do4v7foHJvRJLpRRoGaVPWX6DDEjX3yTK7J91gpwUQpE

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 Follow-up on #1107 — payment-language guard still passes the full quality gate on 6d89af2bd6df with approval in place.

Merge-ready whenever convenient.

@yanyishuai

Copy link
Copy Markdown
Author

@qingfeng312 CI is green on the latest head (35a1895e455f) for #1107. Could you take another look when you have a moment?

@yanyishuai

Copy link
Copy Markdown
Author

Re-review request on 35a1895.

Companion/fix for #1107 scope; please re-review current SHA (stale CR).

Ready for re-approval when convenient.

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.

2 participants