Skip to content

fix(scheduler): accept safe Unicode pull-request refs - #940

Open
seonghobae wants to merge 7 commits into
mainfrom
fix/scheduler-unicode-ref-current-main-20260812
Open

fix(scheduler): accept safe Unicode pull-request refs#940
seonghobae wants to merge 7 commits into
mainfrom
fix/scheduler-unicode-ref-current-main-20260812

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Outcome

Replay the safe-Unicode scheduler repair on the protected-main snapshot and permanently bind every central merge-scheduler control-plane change to the exact-head full-suite quality gate. The scheduler can inspect and dispatch GitHub-valid international branch names without relaxing command, ref, workflow, publication, review, or merge safety.

Closes #685. Supersedes only the relevant source/test slice of closed unmerged #696; its unrelated CodeQL workflow bump is excluded.

Exact identity and bounded scope

  • protected base and live tip: main@6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba;
  • original bounded GREEN head: fa53feff221633b4911df8d3e0715551935dcf26;
  • exact current head: 842560579ae73e5aad5bba7d522c25c61fcdf1ea;
  • state: Ready and mechanically mergeable;
  • bounded diff: scheduler source/tests, permanent Strix exact-head trigger/contract, doctoring, and changelog.

A later update introduced an unrelated trusted-lock installer-test change. A non-destructive forward cleanup restores that test to protected-main content while retaining the legitimate Unicode and trigger-doctoring contracts. No force-push, rebase, history rewrite, predecessor evidence transfer, or gate weakening was used.

Every check, review, approval, or generated merge result bound to an earlier head is historical only. Current-head evidence must regenerate.

Safe Unicode ref boundary

The ASCII-only validator rejected GitHub-valid branch names such as 🎨-palette-ux-improvement-13325911538352561627 before repository-dispatch fields were constructed.

The replacement permits non-ASCII graphic and letter characters while continuing to reject:

  • ASCII shell metacharacters and whitespace;
  • Unicode control, format, and separator categories;
  • leading dashes, reserved HEAD, @{, repeated/traversal slash or dot forms, hidden path components, trailing dots/slashes, and component .lock suffixes.

All Git/GitHub calls remain structured argv or typed API fields. No shell evaluation, workflow permission, credential, protected setting, reviewer, merge, or release authority is broadened.

Exact-head scheduler quality boundary

The broader suite exposed a second causal gap: changes to the merge-scheduler workflow, production script, or scheduler tests did not trigger the permanent Strix exact-head full-suite workflow. The bounded repair adds exactly those three scheduler surfaces and makes the path-policy test assert literal PR-head checkout, complete repository testing, and a clean-worktree gate.

Test-first evidence

The branch records RED/GREEN evidence for the emoji ref and for missing scheduler trigger paths. The predecessor GREEN head completed exact-head checkout, the full suite, bounded Strix shell regression, compilation, and clean-worktree verification. Those results are lineage only.

The current head must regenerate every applicable exact-head quality, security, supply-chain, and semantic-review result. Pending, queued, skipped, cancelled, absent, stale, predecessor-head, local-only, author-only, status-only, synthetic, or model-only evidence is not acceptance.

Acceptance and rollback

Merge or auto-merge only after the unchanged current head has terminal-success required gates, zero valid unresolved findings, a qualifying current-head semantic verdict, two qualifying independent non-author approvals including last-push approval, compatible live-base evidence, and ordinary expected-head branch-protection authorization.

After protected integration, scheduled/manual queue evidence must show the formerly rejected Unicode branch reaching its normal dispatch/defer decision, and a scheduler-source-only change must trigger the permanent exact-head suite. Rollback must preserve both properties. No self-approval, administrative bypass, synthetic approval, or protection weakening is requested.

Summary by CodeRabbit

  • 개선 사항

    • GitHub에서 유효한 유니코드 브랜치 및 풀 리퀘스트 참조를 지원합니다.
    • 셸 메타문자, 제어·형식·공백 문자와 Git에서 위험한 경로 형식은 계속 차단합니다.
    • 관련 변경 시 정확한 커밋을 기준으로 전체 품질 검사를 수행합니다.
  • 문서

    • 유니코드 Git 참조 처리 정책과 안전한 사용 기준을 문서화했습니다.
  • 테스트

    • 유니코드 참조 허용 및 위험한 참조 차단 사례를 보강했습니다.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 909fae52-3dff-44f9-af66-1d6ba71f0549

📥 Commits

Reviewing files that changed from the base of the PR and between 6eb06cd and 8425605.

📒 Files selected for processing (6)
  • .github/workflows/strix-changed-path-quality-ci.yml
  • CHANGELOG.md
  • docs/doctoring/scheduler-unicode-git-refs.md
  • scripts/ci/pr_review_merge_scheduler.py
  • tests/test_pr_review_merge_scheduler.py
  • tests/test_strix_changed_path_policy.py

📝 Walkthrough

Walkthrough

스케줄러가 이모지와 한글을 포함한 유효한 Unicode Git ref를 허용하도록 검증을 변경했습니다. 제어 문자, 공백, 셸 메타문자 및 위험한 Git 경로 형식은 계속 거부합니다. 관련 변경은 exact-head 품질 CI를 실행합니다.

Changes

스케줄러 Git ref 검증

Layer / File(s) Summary
Unicode Git ref 검증 규칙
scripts/ci/pr_review_merge_scheduler.py, tests/test_pr_review_merge_scheduler.py, docs/doctoring/scheduler-unicode-git-refs.md
정규식 검증을 명시적 문자 및 Unicode 범주 검사로 변경했습니다. 이모지와 한글을 허용하고 .lock, 공백, 제어 문자 및 위험한 경로 형식을 거부하는 테스트와 문서를 추가했습니다.

스케줄러 품질 CI 연결

Layer / File(s) Summary
스케줄러 변경 품질 CI 연결
.github/workflows/strix-changed-path-quality-ci.yml, tests/test_strix_changed_path_policy.py, CHANGELOG.md
스케줄러 워크플로, 구현 스크립트 및 테스트 파일을 변경 경로에 추가했습니다. exact-head 전체 테스트와 git diff --exit-code 검사를 검증합니다.

Estimated code review effort: 3 (보통) | ~20 minutes

Merge Risk: ⚪ Minimal · up to 84256

The change accepts safe GitHub-valid Unicode branch names while preserving unsafe-ref rejection and adds exact-head quality coverage for scheduler changes. No actionable merge-blocking risk remains after normal checks and review.

Possibly related PRs

  • ContextualWisdomLab/.github#840: 동일한 pr_review_merge_scheduler.py와 테스트를 수정하며, 스케줄러의 dispatch 및 검증 동작과 직접 연결됩니다.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 안전한 Unicode pull-request ref를 허용하는 핵심 변경을 정확하고 간결하게 설명합니다.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/scheduler-unicode-ref-current-main-20260812

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.

@seonghobae
seonghobae marked this pull request as ready for review August 12, 2026 03:03

Copy link
Copy Markdown
Contributor Author

@opencode-agent review

Review exact current head b999b0593267f6be6504d88db73a6a1b0bd754c5 against independently resolved live main 6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba. 16 exact-head hosted workflows are terminal-success and no review thread is unresolved. Verify Unicode branch refs are accepted only through the bounded GitHub API path while shell, normalization, and scheduler mutation boundaries remain fail-closed. Automated judgment is not qualifying independent human approval or merge authorization.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review
@opencode-agent review
@cwl-noema-review review

Review exact current head b999b0593267f6be6504d88db73a6a1b0bd754c5 only. Exact-head security and supply-chain workflows are terminal-success. Validate GitHub-valid Unicode branch acceptance while preserving rejection of shell metacharacters, whitespace, Unicode control/format/separator categories, leading dashes, HEAD, @{, traversal/hidden components, trailing dots/slashes, and .lock suffixes. Confirm structured argv/API use and the two-file scope. Review only; do not mutate, merge, or alter protections.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

expected_head='b999b0593267f6be6504d88db73a6a1b0bd754c5'
expected_base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'

echo '== Local commit identity and ancestry =='
git rev-parse HEAD
git merge-base HEAD "$expected_base"
git rev-list --left-right --count "$expected_base...HEAD"
git diff-tree --no-commit-id --name-status -r HEAD
git diff --check "$expected_base...HEAD"

echo '== Changed-file outlines =='
git diff --name-only "$expected_base...HEAD" | while IFS= read -r path; do
  printf '\n-- %s --\n' "$path"
  case "$path" in
    *.py) ast-grep outline "$path" --items all --view expanded ;;
    *) sed -n '1,260p' "$path" ;;
  esac
done

echo '== Exact patch =='
git diff --find-renames --find-copies --unified=80 "$expected_base...HEAD"

Length of output: 42964


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/.github'
pr='940'
head='b999b0593267f6be6504d88db73a6a1b0bd754c5'

echo '== Pull request metadata =='
gh pr view "$pr" --repo "$repo" --json number,state,isDraft,headRefOid,baseRefOid,changedFiles,mergeable,reviewDecision,statusCheckRollup

echo '== Check runs for the requested commit =='
gh api "repos/$repo/commits/$head/check-runs?per_page=100" \
  --jq '.check_runs[] | [.name,.status,.conclusion,.head_sha,.details_url] | `@tsv`'

echo '== Workflow runs for the requested commit =='
gh api "repos/$repo/actions/runs?head_sha=$head&per_page=100" \
  --jq '.workflow_runs[] | [.name,.status,.conclusion,.head_sha,.event,.html_url] | `@tsv`'

echo '== Review threads and reviews =='
gh api graphql -F owner='ContextualWisdomLab' -F name='.github' -F number="$pr" -f query='
query($owner: String!, $name: String!, $number: Int!) {
  repository(owner: $owner, name: $name) {
    pullRequest(number: $number) {
      reviewThreads(first: 100) {
        nodes { isResolved isOutdated comments(first: 1) { nodes { author { login } body } } }
      }
      reviews(first: 100) { nodes { author { login } state commit { oid } } }
    }
  }
}' --jq '.data.repository.pullRequest'

Length of output: 45371


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file='scripts/ci/pr_review_merge_scheduler.py'

echo '== Process execution and validation boundaries =='
sed -n '420,610p' "$file"

echo '== Ref-validation call sites =='
rg -n -C 5 '\bvalidate_git_ref\s*\(' "$file"

echo '== Dispatch and merge/update mutation paths =='
sed -n '1450,1590p' "$file"
sed -n '1770,2165p' "$file"

echo '== Structured process invocation sites =='
rg -n -C 4 '\brun(?:_github_(?:read|actions|dispatch))?\s*\(' "$file"

echo '== PR ref field use sites =='
rg -n -C 4 '(?:baseRefName|headRefName|baseRefOid|headRefOid)' "$file"

echo '== Unicode regression test context =='
sed -n '140,260p' 'tests/test_pr_review_merge_scheduler.py'

Length of output: 56407


@seonghobae Reviewed exact head b999b0593267f6be6504d88db73a6a1b0bd754c5 against base 6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba.

No code findings.

  • The branch is one commit ahead and zero commits behind the requested base.
  • The change scope is two files only: scripts/ci/pr_review_merge_scheduler.py and tests/test_pr_review_merge_scheduler.py.
  • validate_git_ref accepts the tested emoji and Korean branch refs.
  • It rejects ASCII shell metacharacters and whitespace, Unicode control/format/separator characters, leading dashes, HEAD, @{, traversal and hidden components, trailing dots or slashes, and .lock suffixes.
  • The scheduler uses structured argv with shell=False.
  • Repository dispatch uses gh api --input - with a JSON payload.
  • The dispatch target remains validated and default-branch-bound.
  • Merge, branch-update, and restamp mutation paths retain SHA validation, current-head guards, and GitHub Actions actor checks.
  • Exact-head GitHub workflow runs are terminal-success. Conditional skipped jobs are not treated as passing evidence.
  • GitHub reports no review threads. It also reports REVIEW_REQUIRED and no submitted reviews.

I applied the stored exact-current-head evidence policy during this review. This review does not provide independent human approval or merge authorization.


🧠 Learnings used
Learnt from: seonghobae
Repo: ContextualWisdomLab/.github PR: 0
File: :0-0
Timestamp: 2026-08-05T13:44:10.007Z
Learning: For PR `#782`, only successful checks associated with the exact current head are valid merge evidence. Do not treat queued, in-progress, cancelled, predecessor-head, temporary-workflow, or administrative-bypass results as passing evidence. Before a formal approval, verify that the direct security and supply-chain workflows, the permanent hourly NVIDIA NIM contract, current-head reviews, unresolved-thread checks, and an independent approval have completed successfully.
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Copy Markdown
Contributor Author

@opencode-agent review
@cwl-noema-review review
@coderabbitai review

Review exact current head b999b0593267f6be6504d88db73a6a1b0bd754c5 only. Validate the two-file ref-safety repair against GitHub ref rules and structured argv/API usage: safe emoji and Korean branch names are accepted, while ASCII shell punctuation/whitespace, Unicode C/Z categories, leading dash, reserved HEAD, @{, traversal/repeated separators, hidden components, trailing dot/slash, and component .lock suffixes remain rejected. Confirm no dispatch, credential, permission, merge, or protection authority changes. All observed exact-head hosted checks are terminal-success. Review only; do not mutate or merge.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/.github'
pr='940'
head='b999b0593267f6be6504d88db73a6a1b0bd754c5'
base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'

echo '== Exact commit and scope =='
printf 'HEAD: '; git rev-parse HEAD
printf 'Expected head object: '; git rev-parse "$head^{commit}"
printf 'Merge base: '; git merge-base "$head" "$base"
printf 'Ahead/behind: '; git rev-list --left-right --count "$base...$head"
git diff-tree --no-commit-id --name-status -r "$head"
git diff --check "$base...$head"
git diff --find-renames --unified=100 "$base...$head"

echo '== Changed-file structure =='
git diff --name-only "$base...$head" | while IFS= read -r path; do
  printf '\n-- %s --\n' "$path"
  case "$path" in
    *.py) ast-grep outline "$path" --items all --view expanded ;;
    *) sed -n '1,280p' "$path" ;;
  esac
done

echo '== Validator, structured invocation, and authority boundaries =='
file='scripts/ci/pr_review_merge_scheduler.py'
rg -n -C 12 '\bvalidate_git_ref\s*\(' "$file"
rg -n -C 8 '(?:subprocess\.(?:run|Popen|check_output|check_call)|\brun(?:_github_(?:read|actions|dispatch))?\s*\(|shell\s*=|gh\s+api|repository-dispatch)' "$file"
rg -n -C 8 '(?:permissions:|credential|token|merge|update-ref|restamp|dispatch|baseRefName|headRefName|headRefOid|baseRefOid)' "$file"

echo '== Unicode regression tests =='
test_file='tests/test_pr_review_merge_scheduler.py'
rg -n -C 16 '(?:validate_git_ref|🎨|Korean|Korean|zero.width|non.breaking|\.lock|HEAD|@\{|hidden|traversal)' "$test_file"

echo '== Current remote PR and exact-head checks =='
gh pr view "$pr" --repo "$repo" \
  --json state,headRefOid,baseRefOid,changedFiles,mergeable,reviewDecision,statusCheckRollup
gh api "repos/$repo/commits/$head/check-runs?per_page=100" \
  --jq '.check_runs[] | [.name,.status,.conclusion,.head_sha] | `@tsv`'
gh api graphql -F owner='ContextualWisdomLab' -F name='.github' -F number="$pr" -f query='
query($owner: String!, $name: String!, $number: Int!) {
  repository(owner: $owner, name: $name) {
    pullRequest(number: $number) {
      reviewThreads(first: 100) { nodes { isResolved isOutdated } }
      reviews(first: 100) { nodes { author { login } state commit { oid } } }
    }
  }
}' --jq '.data.repository.pullRequest'

Length of output: 228340


@seonghobae Reviewed exact head b999b0593267f6be6504d88db73a6a1b0bd754c5 against base 6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba.

No code findings.

  • The change is one commit ahead of the specified base.
  • The change scope is two files only.
  • validate_git_ref accepts the tested emoji and Korean branch refs.
  • It rejects ASCII punctuation and whitespace outside ._/-.
  • It rejects Unicode control, format, and separator categories.
  • It rejects leading dashes, HEAD, @{, traversal, repeated separators, hidden components, trailing dots or slashes, and .lock component suffixes.
  • The scheduler passes refs through structured argv and JSON API payloads.
  • subprocess.run uses shell=False.
  • The dispatch path validates ref, SHA, and repository fields before gh api --input -.
  • The restamp path validates headRefName before the GitHub refs API call.
  • The diff does not change dispatch targets, credentials, permissions, merge behavior, actor gates, or protection authority.

I applied the stored exact-current-head evidence policy. Direct exact-head checks with SUCCESS are valid evidence. SKIPPED and NEUTRAL jobs are not positive evidence. GitHub currently reports no review threads, no submitted reviews, and REVIEW_REQUIRED.

This review does not provide independent human approval or merge authorization.


🧠 Learnings used
Learnt from: seonghobae
Repo: ContextualWisdomLab/.github PR: 0
File: :0-0
Timestamp: 2026-08-05T13:44:10.007Z
Learning: For PR `#782`, only successful checks associated with the exact current head are valid merge evidence. Do not treat queued, in-progress, cancelled, predecessor-head, temporary-workflow, or administrative-bypass results as passing evidence. Before a formal approval, verify that the direct security and supply-chain workflows, the permanent hourly NVIDIA NIM contract, current-head reviews, unresolved-thread checks, and an independent approval have completed successfully.

Learnt from: seonghobae
Repo: ContextualWisdomLab/.github PR: 828
File: docs/doctoring/scheduler-independent-current-head-approval.md:13-20
Timestamp: 2026-08-09T15:19:54.177Z
Learning: In `scripts/ci/pr_review_merge_scheduler.py` and `scripts/ci/_pr_review_merge_scheduler_core.py`, the scheduler cannot obtain an authoritative GitHub `last_pusher` identity from its pull-request GraphQL or REST evidence. Do not substitute commit author, committer, or workflow actor. GitHub ruleset enforcement remains authoritative: the core treats `BLOCKED` mergeability with `reviewDecision == APPROVED` as a probable `require_last_push_approval` state, does not merge until `CLEAN`, and uses the bounded same-tree restamp/wait path.

You are interacting with an AI system.

@seonghobae
seonghobae enabled auto-merge (squash) August 12, 2026 10:46

Copy link
Copy Markdown
Contributor Author

Exact-current-head review request for b999b0593267f6be6504d88db73a6a1b0bd754c5 over protected main@6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba.

Review the bounded two-file safe-Unicode ref repair. It permits GitHub-valid international branch names while continuing to reject ASCII shell metacharacters and whitespace, Unicode control/format/separator categories, leading dashes, reserved HEAD, @{, traversal and hidden components, trailing dot/slash forms, and .lock suffixes. Structured argv/API calls remain unchanged. CodeQL PR, Python Security, Security Scan, SAST Semgrep, Secret Scan, OSV-Scanner PR, Scorecard PR, and SBOM Generation are terminal-success on this exact head; no review thread exists.

Keep the exact head unchanged. Do not broaden the validator beyond the tested boundary, synthesize author approval, update the branch, merge, release, or bypass protection.

@coderabbitai review
@opencode-agent review
@cwl-noema-review review
@strix review

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Rate Limit Exceeded

@seonghobae have exceeded the limit for the number of chat messages per hour. Please wait 17 minutes and 18 seconds before sending another message.

Copy link
Copy Markdown
Contributor Author

Exact-current-head semantic review request for fa53feff221633b4911df8d3e0715551935dcf26 over protected main@6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba.

Review the four-file bounded repair on this exact head. validate_git_ref now accepts GitHub-valid international graphic/letter refs such as 🎨-palette-ux-improvement-13325911538352561627 and Korean branch names while continuing to reject ASCII shell metacharacters/whitespace, Unicode control/format/separator categories, leading dashes, reserved HEAD, @{, traversal/repeated-slash/hidden components, trailing dot/slash, and .lock suffixes. Git/GitHub operations remain structured argv/API fields. The same head also binds every merge-scheduler source/workflow/test change to the permanent exact-head full-suite Strix quality path; the fail-first trigger regression and exact-head quality run are green with 978 tests plus 16 subtests, bounded Strix shell regression, compilation, and clean worktree. Strix is terminal-success; the remaining hosted exact-head workflows are queued and not passing evidence.

Keep the exact head unchanged. Do not broaden the validator beyond the tested safe Unicode boundary, infer shell safety from displayability alone, remove scheduler quality triggers, synthesize author approval, update the branch, merge, release, or bypass protection.

@coderabbitai review
@opencode-agent review
@cwl-noema-review review
@strix review

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/.github'
pr='940'
head='fa53feff221633b4911df8d3e0715551935dcf26'
base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'

echo '== Commit identity and scope =='
printf 'Checked-out HEAD: '; git rev-parse HEAD
printf 'Requested head: '; git rev-parse "${head}^{commit}"
printf 'Merge base: '; git merge-base "$head" "$base"
printf 'Ahead/behind: '; git rev-list --left-right --count "$base...$head"
git diff --name-status "$base...$head"
git diff --check "$base...$head"

echo '== Full exact diff =='
git diff --find-renames --find-copies --unified=80 "$base...$head"

echo '== Changed file outlines =='
git diff --name-only "$base...$head" | while IFS= read -r path; do
  printf '\n-- %s --\n' "$path"
  case "$path" in
    *.py) ast-grep outline "$path" --items all --view expanded ;;
    *) sed -n '1,320p' "$path" ;;
  esac
done

echo '== Scheduler validation and invocation boundaries =='
scheduler='scripts/ci/pr_review_merge_scheduler.py'
rg -n -C 16 '\bvalidate_git_ref\s*\(' "$scheduler"
rg -n -C 8 '(?:subprocess\.(?:run|Popen|check_output|check_call)|\brun(?:_github_(?:read|actions|dispatch))?\s*\(|shell\s*=|gh\s+api|repository-dispatch)' "$scheduler"
rg -n -C 8 '(?:baseRefName|headRefName|baseRefOid|headRefOid|update-ref|merge|restamp|permissions:|credential|token)' "$scheduler"

echo '== Ref and quality-trigger regression tests =='
tests='tests/test_pr_review_merge_scheduler.py'
rg -n -C 18 '(?:validate_git_ref|🎨|Korean|non.breaking|zero.width|\.lock|HEAD|@\{|hidden|traversal|strix-changed-path-quality-ci|pr_review_merge_scheduler)' "$tests"

echo '== PR and exact-head GitHub state =='
gh pr view "$pr" --repo "$repo" \
  --json state,isDraft,headRefOid,baseRefOid,changedFiles,mergeable,mergeStateStatus,reviewDecision,statusCheckRollup

gh api "repos/$repo/commits/$head/check-runs?per_page=100" \
  --jq '.check_runs[] | [.name,.status,.conclusion,.head_sha] | `@tsv`'

gh api "repos/$repo/actions/runs?head_sha=$head&per_page=100" \
  --jq '.workflow_runs[] | [.name,.status,.conclusion,.head_sha,.event] | `@tsv`'

gh api graphql -F owner='ContextualWisdomLab' -F name='.github' -F number="$pr" -f query='
query($owner: String!, $name: String!, $number: Int!) {
  repository(owner: $owner, name: $name) {
    pullRequest(number: $number) {
      reviewThreads(first: 100) {
        nodes {
          isResolved
          isOutdated
          comments(first: 1) { nodes { author { login } body } }
        }
      }
      reviews(first: 100) {
        nodes { author { login } state commit { oid } }
      }
    }
  }
}' --jq '.data.repository.pullRequest'

Length of output: 216842


@seonghobae Reviewed exact head fa53feff221633b4911df8d3e0715551935dcf26 against main@6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba.

No code findings.

  • The checked-out commit matches the requested exact head.
  • The diff changes four files only.
  • The diff is three commits ahead of the specified base and zero commits behind it.

validate_git_ref now accepts the tested emoji and Korean refs.

It continues to reject:

  • ASCII shell punctuation and whitespace outside ._/-;
  • Unicode control, format, and separator characters;
  • leading dashes, HEAD, and @{;
  • traversal, repeated separators, hidden components, trailing dots or slashes; and
  • .lock component suffixes.

The scheduler continues to use argument vectors with shell=False.

Repository dispatch continues to use gh api --input - with JSON input.

The changed code does not modify dispatch targets, credentials, permissions, merge guards, mutation-actor gates, or branch-protection behavior.

The Strix workflow now triggers for the scheduler workflow, scheduler source, and scheduler test file. The regression test also checks the exact PR-head checkout, the full test command, and the clean-worktree gate.

Strix Changed Path Quality CI completed successfully on this exact head.

The remaining observed exact-head workflows are queued. Skipped jobs and queued jobs are not passing evidence. GitHub currently reports BLOCKED mergeability, REVIEW_REQUIRED, no submitted reviews, and no review threads.

I applied the stored exact-current-head evidence policy. This review does not provide a qualifying independent human approval or merge authorization.


🧠 Learnings used
Learnt from: seonghobae
Repo: ContextualWisdomLab/.github PR: 0
File: :0-0
Timestamp: 2026-08-05T13:44:10.007Z
Learning: For PR `#782`, only successful checks associated with the exact current head are valid merge evidence. Do not treat queued, in-progress, cancelled, predecessor-head, temporary-workflow, or administrative-bypass results as passing evidence. Before a formal approval, verify that the direct security and supply-chain workflows, the permanent hourly NVIDIA NIM contract, current-head reviews, unresolved-thread checks, and an independent approval have completed successfully.

Learnt from: seonghobae
Repo: ContextualWisdomLab/.github PR: 828
File: docs/doctoring/scheduler-independent-current-head-approval.md:13-20
Timestamp: 2026-08-09T15:19:54.177Z
Learning: In `scripts/ci/pr_review_merge_scheduler.py` and `scripts/ci/_pr_review_merge_scheduler_core.py`, the scheduler cannot obtain an authoritative GitHub `last_pusher` identity from its pull-request GraphQL or REST evidence. Do not substitute commit author, committer, or workflow actor. GitHub ruleset enforcement remains authoritative: the core treats `BLOCKED` mergeability with `reviewDecision == APPROVED` as a probable `require_last_push_approval` state, does not merge until `CLEAN`, and uses the bounded same-tree restamp/wait path.

Learnt from: seonghobae
Repo: ContextualWisdomLab/.github PR: 828
File: CHANGELOG.md:24-24
Timestamp: 2026-08-09T15:19:09.867Z
Learning: In the organization merge scheduler, GitHub pull-request GraphQL and REST evidence does not provide an authoritative identity for the actor who last pushed the ref. Do not claim that the application-level approval gate independently excludes the last pusher. The scheduler requires live `mergeStateStatus == CLEAN` and `reviewDecision == APPROVED`; when `require_last_push_approval` is `BLOCKED`, it restamps or waits instead of merging. The `CHANGELOG.md` security entry should describe only the verifiable exact-head, non-author, non-OpenCode approval gate.

Learnt from: seonghobae
Repo: ContextualWisdomLab/.github PR: 828
File: tests/test_pr_review_merge_scheduler.py:84-98
Timestamp: 2026-08-09T15:20:09.474Z
Learning: In the organization merge scheduler, GitHub pull request payloads do not provide an authoritative `last_pusher` identity. Do not request synthetic `last_pusher` fixture fields or application-level tests for that identity. When GitHub branch protection requires last-push approval, GitHub reports `mergeStateStatus == BLOCKED` until it is satisfied; `current_head_can_attempt_merge` therefore prevents direct merge attempts, and the scheduler uses its restamp or wait path before exact-head authorization gates are regenerated.

You are interacting with an AI system.

Copy link
Copy Markdown
Contributor Author

Exact-current-head automated and independent review requested for fa53feff221633b4911df8d3e0715551935dcf26 against protected main@6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba.

Fresh evidence: all nine directly observed exact-head workflows are now terminal-success, no inline thread exists, and the permanent quality gate checked out the literal head with persisted credentials disabled, ran 978 tests plus 16 subtests, executed the bounded Strix regression, compiled the changed contracts, and left a clean worktree. Review both causal boundaries: GitHub-valid non-ASCII graphic/letter refs are accepted while Unicode control/format/separator, shell, traversal, hidden-component, reserved, and .lock forms remain rejected; every scheduler workflow/source/test change now triggers the exact-head full-suite gate.

Submit an exact-head verdict without updating the branch, broadening unsafe ref syntax, removing scheduler trigger coverage, synthesizing author approval, or bypassing protection.

@coderabbitai review
@opencode-agent review
@cwl-noema-review review
@strix review

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Rate Limit Exceeded

@seonghobae have exceeded the limit for the number of chat messages per hour. Please wait 5 minutes and 14 seconds before sending another message.

Record the safe-Unicode ref decision with APA 7th citations. Isolate
Darwin installer tests on the linux x86_64 path.
@seonghobae

Copy link
Copy Markdown
Contributor Author

Reviewed. CHANGELOG + APA 7th doctoring (Unicode 16.0, git-check-ref-format). Reality tests keep the observed emoji branch and Hangul ref. Local suite 978 passed x2. Auto-merge armed.

Materialize a base Python lock only when every package line is an exact
SHA-256 pin or a two-token relative -r/--requirement include of a
candidate lock path. A lone --require-hashes directive, ./dotted paths,
and -r other-hashes.txt no longer enter the trusted build context.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.

Findings

1. HIGH Current-head GitHub Checks - Fix failed required checks before approval

  • Problem: Failed same-head checks remain for bc85e8839ba819a179d66f0b97a114a69fba0640.
  • Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
  • Fix: Read and fix the failed check logs below, then rerun the current-head checks.
  • Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.

Failed checks:

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: strix-changed-path-quality-ci.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow: strix-changed-path-quality-ci.yml"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file (2 files)"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file (2 files)"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs: scheduler-unicode-git-refs.md"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs: scheduler-unicode-git-refs.md"]
  R3 --> V3["docs review"]
  Evidence --> S4["CI script (2 files)"]
  S4 --> I4["review and security gate shell path"]
  I4 --> R4["Review risk: CI script (2 files)"]
  R4 --> V4["bash -n plus Strix self-test"]
  Evidence --> S5["Test (3 files)"]
  S5 --> I5["regression suite"]
  I5 --> R5["Review risk: Test (3 files)"]
  R5 --> V5["targeted test run"]
Loading

@opencode-agent

opencode-agent Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 842560579ae73e5aad5bba7d522c25c61fcdf1ea
  • Workflow run: 31896178081
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.

Findings

1. HIGH Current-head GitHub Checks - Fix failed required checks before approval

  • Problem: Failed same-head checks remain for 842560579ae73e5aad5bba7d522c25c61fcdf1ea.
  • Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
  • Fix: Read and fix the failed check logs below, then rerun the current-head checks.
  • Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.

Failed checks:

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: strix-changed-path-quality-ci.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow: strix-changed-path-quality-ci.yml"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file: CHANGELOG.md"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs: scheduler-unicode-git-refs.md"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs: scheduler-unicode-git-refs.md"]
  R3 --> V3["docs review"]
  Evidence --> S4["CI script: pr_review_merge_scheduler.py"]
  S4 --> I4["review and security gate shell path"]
  I4 --> R4["Review risk: CI script: pr_review_merge_scheduler.py"]
  R4 --> V4["bash -n plus Strix self-test"]
  Evidence --> S5["Test (2 files)"]
  S5 --> I5["regression suite"]
  I5 --> R5["Review risk: Test (2 files)"]
  R5 --> V5["targeted test run"]
Loading

@opencode-agent
opencode-agent Bot disabled auto-merge August 14, 2026 01:54
@seonghobae
seonghobae marked this pull request as draft August 14, 2026 09:04

Copy link
Copy Markdown
Contributor Author

Returned to Draft because the exact current tree mixes the safe-Unicode scheduler repair with an unrelated trusted-uv materializer branch.

The bounded product slice is sound: accept GitHub-valid Unicode ref components while rejecting control/format/separator categories, shell metacharacters, traversal/reserved forms, and .lock; and bind scheduler surfaces to the permanent exact-head full-suite trigger. Head bc85e8839ba819a179d66f0b97a114a69fba0640 additionally changes materialize_base_python_requirements.py and its tests.

Rebuild from protected main retaining only the scheduler source/tests, Strix changed-path gate/test, doctoring, directly necessary AGENTS/changelog evidence, and no materializer changes. Refresh stale head/check text, then reacquire exact-head scheduler/Strix/security/supply-chain and independent-review evidence.

@seonghobae
seonghobae marked this pull request as ready for review August 14, 2026 13:53

Copy link
Copy Markdown
Contributor Author

@coderabbitai review
@opencode-agent review
@cwl-noema-review review
@strix review

Review only exact current head 8866aa67241a30cd2e33b37441583eeb44e4c0bb against live protected main@6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba. I removed the unrelated trusted-uv production delta by restoring the exact documented safe-Unicode scheduler tree as a new descendant. The current branch preserves structured argv/API dispatch, rejects shell/control/separator/hidden/traversal/.lock/reserved ref forms, accepts GitHub-valid international refs, and permanently binds scheduler source/tests to exact-head full-suite Strix quality CI. No review thread exists. Exact-head checks are regenerating; nonterminal evidence is not acceptance. Review read-only; do not mutate source, synthesize approval, weaken ref validation or protection, or merge.

@seonghobae
seonghobae enabled auto-merge (squash) August 14, 2026 13:55
@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/.github'
pr='940'
head='8866aa67241a30cd2e33b37441583eeb44e4c0bb'
base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'

echo '== Exact commit identity and ancestry =='
printf 'checked_out_head='; git rev-parse HEAD
printf 'requested_head='; git rev-parse "${head}^{commit}"
printf 'merge_base='; git merge-base "$head" "$base"
printf 'ahead_behind='; git rev-list --left-right --count "$base...$head"
echo '== Changed paths =='
git diff --name-status "$base...$head"
echo '== Whitespace errors =='
git diff --check "$base...$head"
echo '== Full patch =='
git diff --find-renames --find-copies --unified=100 "$base...$head"

echo '== Affected Python structure =='
git diff --name-only "$base...$head" | while IFS= read -r path; do
  case "$path" in
    *.py)
      printf '\n-- %s --\n' "$path"
      ast-grep outline "$path" --items all --view expanded
      ;;
  esac
done

echo '== Validator and process/API boundaries =='
scheduler='scripts/ci/pr_review_merge_scheduler.py'
rg -n -C 14 '\bvalidate_git_ref\s*\(' "$scheduler"
rg -n -C 8 '(?:subprocess\.(?:run|Popen|check_output|check_call)|\brun(?:_github_(?:read|actions|dispatch))?\s*\(|shell\s*=|gh\s+api|repository-dispatch)' "$scheduler"
rg -n -C 8 '(?:baseRefName|headRefName|headRefOid|baseRefOid|update-ref|merge|restamp|permissions:|credential|token)' "$scheduler"

echo '== Tests and quality workflow trigger policy =='
tests='tests/test_pr_review_merge_scheduler.py'
workflow='.github/workflows/strix-changed-path-quality-ci.yml'
rg -n -C 18 '(?:validate_git_ref|🎨|Korean|non.breaking|zero.width|\.lock|HEAD|@\{|hidden|traversal|strix-changed-path-quality-ci|pr_review_merge_scheduler|clean.worktree|persist-credentials)' "$tests"
sed -n '1,300p' "$workflow"

echo '== Current PR and exact-head GitHub state =='
gh pr view "$pr" --repo "$repo" \
  --json state,isDraft,headRefOid,baseRefOid,changedFiles,mergeable,mergeStateStatus,reviewDecision,statusCheckRollup
gh api "repos/$repo/commits/$head/check-runs?per_page=100" \
  --jq '.check_runs[] | [.name,.status,.conclusion,.head_sha] | `@tsv`'
gh api "repos/$repo/actions/runs?head_sha=$head&per_page=100" \
  --jq '.workflow_runs[] | [.name,.status,.conclusion,.head_sha,.event] | `@tsv`'
gh api graphql -F owner='ContextualWisdomLab' -F name='.github' -F number="$pr" -f query='
query($owner: String!, $name: String!, $number: Int!) {
  repository(owner: $owner, name: $name) {
    pullRequest(number: $number) {
      reviewThreads(first: 100) {
        nodes { isResolved isOutdated comments(first: 1) { nodes { author { login } body } } }
      }
      reviews(first: 100) { nodes { author { login } state commit { oid } } }
    }
  }
}' --jq '.data.repository.pullRequest'

Length of output: 144523


🏁 Script executed:

#!/bin/bash
set -euo pipefail

head='8866aa67241a30cd2e33b37441583eeb44e4c0bb'
base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'
scheduler='scripts/ci/pr_review_merge_scheduler.py'
tests='tests/test_pr_review_merge_scheduler.py'

echo '== Identity, scope, and commits =='
printf 'checked_out='; git rev-parse HEAD
printf 'merge_base='; git merge-base "$head" "$base"
printf 'ahead_behind='; git rev-list --left-right --count "$base...$head"
git log --oneline --decorate "$base..$head"
git diff --name-status "$base...$head"
git diff --check "$base...$head"

echo '== Exact patch, changed files only =='
git diff --unified=30 "$base...$head" -- \
  'scripts/ci/pr_review_merge_scheduler.py' \
  'tests/test_pr_review_merge_scheduler.py' \
  '.github/workflows/strix-changed-path-quality-ci.yml' \
  'tests/test_strix_changed_path_policy.py' \
  'CHANGELOG.md' \
  'docs/doctoring/**' \
  'AGENTS.md'

echo '== validate_git_ref definition and direct call paths =='
rg -n -A100 -B12 '^def validate_git_ref\b' "$scheduler"
rg -n -A40 -B8 '^def dispatch_(?:opencode_review|strix_evidence)\b' "$scheduler"
rg -n -A45 -B8 '^def restamp_pr_head_for_last_push_approval\b' "$scheduler"

echo '== Targeted regression assertions =='
sed -n '140,205p' "$tests"
rg -n -A90 -B15 'test_.*(?:strix|changed_path|quality).*' 'tests/test_strix_changed_path_policy.py'

echo '== Paths outside the stated scheduler, Strix, and documentation scope =='
git diff --name-only "$base...$head" | grep -Ev \
'^(scripts/ci/pr_review_merge_scheduler\.py|tests/test_pr_review_merge_scheduler\.py|\.github/workflows/strix-changed-path-quality-ci\.yml|tests/test_strix_changed_path_policy\.py|CHANGELOG\.md|docs/doctoring/|AGENTS\.md)$' \
|| true

Length of output: 38278


🏁 Script executed:

#!/bin/bash
set -euo pipefail

head='8866aa67241a30cd2e33b37441583eeb44e4c0bb'
base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'
file='tests/test_materialize_base_python_requirements.py'

echo '== Materializer test delta with line numbers =='
git diff --unified=40 "$base...$head" -- "$file"
echo '== Current changed regions =='
git diff --unified=0 "$base...$head" -- "$file"
echo '== Current surrounding source =='
rg -n -C 12 '(?:relative|include|requirement|materialize)' "$file"

Length of output: 41245


@seonghobae

Finding

tests/test_materialize_base_python_requirements.py remains changed on the requested head. The change adds _force_linux_x86_64_installer() and invokes it in three trusted-uv installer tests. This is unrelated to the safe-Unicode scheduler repair and the Strix scheduler-gate repair.

The current diff therefore does not meet the stated bounded rebuild scope. Remove this materializer-test delta, or move it to its own PR. Then regenerate all exact-head evidence.

The remaining reviewed changes are consistent with the requested safety boundary:

  • validate_git_ref accepts the tested emoji and Hangul refs.
  • It rejects ASCII shell metacharacters and whitespace, Unicode C and Z categories, leading dashes, HEAD, @{, traversal, repeated slashes, hidden components, trailing dots or slashes, and .lock suffixes.
  • Dispatch and restamp paths retain structured argv calls and JSON API input.
  • The Strix workflow now triggers on the scheduler workflow, source, and tests.
  • The regression checks the trigger paths, literal PR-head checkout, full test command, and clean-worktree gate.

The current exact-head workflows are queued, in progress, or cancelled. They are not passing evidence. The CHANGES_REQUESTED review targets predecessor head bc85e8839ba819a179d66f0b97a114a69fba0640 and is not current-head review evidence.

You are interacting with an AI system.

Copy link
Copy Markdown
Contributor Author

Exact-current-head read-only review request for 842560579ae73e5aad5bba7d522c25c61fcdf1ea over protected base 6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba.

The bounded six-file repair accepts GitHub-valid international ref characters while retaining shell/control/format/separator/traversal/hidden/.lock/reserved-name rejection, and ensures all merge-scheduler source/test/workflow changes trigger the permanent exact-head full suite. Recheck structured argv/API use, unchanged credentials/permissions/reviewer/merge authority, exact trigger paths, literal PR-head checkout, full-suite and clean-worktree contracts, and removal of unrelated installer-test drift. Treat predecessor evidence as historical. Do not mutate or merge the branch.

@opencode-agent review
@cwl-noema-review review
@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 15, 2026

Copy link
Copy Markdown

Rate Limit Exceeded

@seonghobae have exceeded the limit for the number of chat messages per hour. Please wait 20 minutes and 51 seconds before sending another message.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.

Findings

1. HIGH Current-head GitHub Checks - Fix failed required checks before approval

  • Problem: Failed same-head checks remain for 842560579ae73e5aad5bba7d522c25c61fcdf1ea.
  • Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
  • Fix: Read and fix the failed check logs below, then rerun the current-head checks.
  • Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.

Failed checks:

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: strix-changed-path-quality-ci.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow: strix-changed-path-quality-ci.yml"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file: CHANGELOG.md"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs: scheduler-unicode-git-refs.md"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs: scheduler-unicode-git-refs.md"]
  R3 --> V3["docs review"]
  Evidence --> S4["CI script: pr_review_merge_scheduler.py"]
  S4 --> I4["review and security gate shell path"]
  I4 --> R4["Review risk: CI script: pr_review_merge_scheduler.py"]
  R4 --> V4["bash -n plus Strix self-test"]
  Evidence --> S5["Test (2 files)"]
  S5 --> I5["regression suite"]
  I5 --> R5["Review risk: Test (2 files)"]
  R5 --> V5["targeted test run"]
Loading

@opencode-agent
opencode-agent Bot disabled auto-merge August 15, 2026 21:05
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.

fix(scheduler): accept safe Unicode pull-request branch refs

1 participant