Skip to content

fix: recognize terminal three-dot ellipses - #159

Merged
mldangelo-oai merged 150 commits into
mainfrom
mdangelo/codex/rouge-terminal-ellipses-20260824
Sep 15, 2026
Merged

mldangelo-oai merged 150 commits into
mainfrom
mdangelo/codex/rouge-terminal-ellipses-20260824

Conversation

@mldangelo-oai

@mldangelo-oai mldangelo-oai commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Recognize terminal three-dot ellipses before independent sentences, including signed/currency-prefixed numbers, leading decimals and completed quotations or standalone brackets. Preserve hesitation, omission markers, existing complete-quantity rules and continuation phrases.

Behavior

  • Contiguous and spaced ellipses share supported opening-token and numeric-start recognition. Adjacent opening quotations keep their delimiter with the following sentence; pending outer closers retain priority for the three-dot suppression rule. Two-dot and ordinary-period opening rules remain unchanged.

  • The scanner and sentence buffer share ASCII single/Treebank quotation state, confirmed apostrophe flags and bracket protection inside quotations. Three-dot lookahead checks the actual remaining ASCII state after inner closers. Relative nesting, triple closers, possessives, bounded leading elisions and English/German closer priority are preserved.

  • Inline asides use their complete matching span across provisional abbreviation chunks and line wraps. The scanner and merger share one lazy endpoint index. Closed quoted three-dot ellipses use the existing aside continuation rule; independent quoted replies and unmatched brackets remain separate. Complete connector runs are traversed as Unicode code points before a bounded continuation check, preserving astral dashes.

  • The endpoint index first matches confirmed quotations, then brackets with a LIFO stack while skipping paired quoted spans. Only a matching top-of-stack closer records a bracket endpoint. Mismatched closers retain the existing literal/recovery policy; an inner bracket can finish while an earlier outer remains unmatched. Angle asides require a Unicode letter immediately after <; mathematical spans retain ordinary terminal behavior. Compact source offsets keep matches aligned with normalized input.

  • Accepted ellipsis boundaries trim leading horizontal separators in the source scanner and chunk merger. Closed-delimiter and spaced-four-dot boundaries preserve the following quotation without carrying its separator prefix; internal and continuation whitespace remain intact.

  • Neutral three-dot continuations reuse confirmed apostrophe flags for the existing elided because/until forms in both scanning phases. Adjacent curly forms use the same bounded rule; pending right closers and confirmed paired quotations retain priority. Existing ASCII adjacent-elision behavior and four-dot priorities remain.

  • The closing-delimiter scan counts three-dot ellipsis bracket closers only outside pending quotation spans. Quoted literal brackets cannot satisfy the outer bracket depth. This reuses the existing quote state and removes a second lexical scan; ordinary punctuation, four-dot lexical counting and scalar bracket recovery keep their existing rules.

  • A pending straight-single closer is consumed before a three-dot boundary, including whitespace before the closer and a following independent ASCII-double quotation. Adjacent bare cased starts pass the existing continuation gates; doubled-apostrophe and spaced-closer/bare-letter ambiguity remain. For Treebank inline asides, an actual triple closer closes a later inner single quotation before its outer pair; malformed two-mark recovery retains its previous behavior.

Scope and limits

These are sentence heuristics, not a full quotation or natural-language parser. Terminal ellipsis starts retain Unicode Cased or numeric evidence; uncased-script examples retain baseline behavior. Neutral mode preserves lowercase invariance and does not promise identical boundaries to ordinary mode. Terminal ellipses take precedence for ambiguous suspense complements such as include... Alpha and Beta. outside the existing copular, first-person and complete-quantity exceptions. Same-family English/German marks retain documented pending-closer priority. The aside index protects confirmed quote pairs; an unmatched quote alone does not invalidate a paired bracket aside. Neutral bracket-aside handling cannot use a following name's capitalization. Ordinary smart-quote period boundaries use the separately landed #157 rules; citation boundaries use #158’s supported grammar and inference limit.

Dot-run priorities are explicit. New closed-quotation aside suppression applies only to contiguous three dots; four-dot terminal precedence and the existing quoted spaced-four early boundary remain. Bare four-dot inline-aside continuations retain baseline behavior; this is distinct from the new closed-quotation three-dot aside rule. A final spaced dot directly before a digit is treated as a decimal point only when at least four preceding spaced dots remain. Shorter ambiguous runs and contiguous period-run behavior remain unchanged. Four-dot rules can split within open quoted spans, with delimiter-family ambiguity. Leading decimals follow the same quantity rules as their leading-zero equivalents, including existing spaced-four-dot precedence.

The endpoint index and quote metadata use linear auxiliary storage. The index is created only after the other terminal, enclosure and continuation gates pass. Scaling and constrained-heap probes cover large inputs; a V8 heap limit is not a process RSS limit. No runtime dependency, public API, configuration or approval-control changes are included.

ASCII and Treebank double markers share one quotation family and do not track arbitrary nesting within that family. The mixed single/double ordering fixes do not change that limit. Completed quoted ellipses use structural sentence-start rules; speech-attribution verbs and names are not inferred. Named reporting clauses can therefore be separated, and neutral mode also separates cased pronoun attributions regardless of capitalization, following the existing ASCII-quote policy.

Integration and simplification

This head composes the ellipsis behavior with the landed quotation/list, Unicode, citation, email-cache and annotation fixes. Ordinary, citation and ellipsis scanners keep their own supported delimiter rules while sharing immutable source metadata. All existing test inputs and mode combinations remain. Six original authored test groups have independently adjudicated ordinary-boundary expectation updates; one inherited neutral auxiliary/ellipsis row follows both the real ellipsis boundary and the current quotation-attribution rule.

Question lookahead and the final merger use the same three-dot boundary decision, so an actual earlier ellipsis stays authoritative. Private incremental question state avoids copying nested stacks between lookaheads. An actually retained ellipsis also preserves its outer typographic quotation when an ordinary inner closer is reached. The ownership rule covers the existing retained contiguous and spaced forms; genuine accepted boundaries, citations and completed quotations release that ownership. Accepted four-dot behavior, leading decimals and the narrower citation inference cap remain distinct.

Private adapter modes that every caller fixed to true are removed. This drops unreachable legacy branches while preserving the dynamic ordinary/citation paths and supported ellipsis decisions. The case-neutral option documents that structural quotation rules can produce boundaries different from default mode, retaining the useful #168 caveat without promising its older local-close policy. No coverage threshold or dependency configuration is changed.

The final review repairs single-closer ownership, complete-source Treebank alias classification and single-guillemet parity. Ordinary and ellipsis scanners share the existing immutable matched-angle mask; unmatched compact comparisons stay prose, while matched angle spans and immediate-letter aside syntax retain their prior rules. Sparse fragment cursors preserve source positions. The quotation-index first pass is extracted without changing its body, allocation or pass count. Several older four-dot cases still place a spaced single closer in the next span; these are documented limits of the preserved four-dot policy.

Validation

Exact head 52adf6657bbab9adbdd323d1ebc91b3fbb069f0f, tree 1915362f8b4d40a5dcb3a6e0c1065bcba17f5c5d: 2,679 tests pass, with 98.23% branch coverage. Source/test types, strict installed Biome, Markdown formatting, build and packed CJS/ESM/TypeScript consumers pass. Independent source/test retention review and normal hooks preserve the validated tracked-file hashes.

The full local run validates this exact final tree. The additive repair commit retains all 964 previous test registrations byte-for-byte and adds 37 expanded regressions. All 36 tracked hashes are identical before validation, after validation and after normal commit hooks.

Meaningful probes cover nested retained versus accepted ellipses, literal brackets, leading decimals, Unicode numbers and CJK question controls, source-position handoffs, original regression retention and bounded large-input behavior. Prior intermediate failures remain recorded separately; only final successful combined validation is attributed to this head.

Current-head Codex code/security and Copilot reviews plus exact declared-toolchain CI are requested separately. Existing local Biome 2.5.10 and Node types 24.13.3 remain older than declared 2.5.13 and 24.13.4 after the preserved installation denial; no alternate download, install or configuration workaround was used.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Aug 24, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-15T14:28:47.146809Z 52adf66 Manual request
🔒 Security Review Completed 2026-09-15T14:27:49.181696Z 52adf66 Manual request
ℹ️ About Codex in GitHub

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

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

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@mldangelo-oai

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Security review completed. No security issues were found in this pull request.

Reviewed commit: 20645fc6c6

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 20645fc6c6

ℹ️ About Codex in GitHub

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

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

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

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

Comment thread src/utils.ts Outdated
@mldangelo-oai

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Security review completed. No security issues were found in this pull request.

Reviewed commit: 1982350188

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1982350188

ℹ️ About Codex in GitHub

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

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

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

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

Comment thread src/utils.ts Outdated
Comment thread src/utils.ts Outdated
@mldangelo-oai

Copy link
Copy Markdown
Contributor Author

@codex review

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 30a994e469

ℹ️ About Codex in GitHub

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

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

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

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

Comment thread src/utils.ts Outdated
Comment thread src/utils.ts Outdated
@mldangelo-oai

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Security review completed. No security issues were found in this pull request.

Reviewed commit: 6c57c8f514

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6c57c8f514

ℹ️ About Codex in GitHub

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

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

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

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

Comment thread src/utils.ts Outdated
Comment thread src/utils.ts Outdated
@mldangelo-oai

Copy link
Copy Markdown
Contributor Author

@codex review

Please review code and security on exact head b782e55. The integrated implementation passes all 2,642 tests with 98.17% branch coverage, source/test types, strict installed lint, formatting, build and packed consumers. The final option-documentation change has complete AST equality and exact comment-reversal proof; the main-ancestry merge preserves all 36 tracked hashes. Exact declared-toolchain CI is running separately.

This composes terminal ellipses with the landed #157 quotation/list behavior, #158 citation rules, #166 private email caches, #169 Unicode handling and #180 annotation/question correction. Ordinary, citation and ellipsis grammars remain distinct. Question lookahead and final merging share the real terminal-ellipsis decision, with private incremental state and retained outer quotation ownership. Accepted boundaries release that ownership. Constant-true private adapter modes and their unreachable branches were removed with independent call-graph and constant-fold AST proof.

All existing regression inputs and mode combinations are retained. Six original groups have independently adjudicated ordinary-boundary expectation changes; one inherited neutral auxiliary/ellipsis row now follows the real ellipsis boundary and existing quotation-attribution rule. Original nested-elision expectations were preserved by fixing source ownership. The supported contiguous/spaced retained-ellipsis forms, accepted four-dot controls, leading decimals, citation cap and documented language ambiguities remain explicit in the PR description. Please critically inspect the final integration and all prior findings, including suppressed claims.

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: b782e55406

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b782e55406

ℹ️ About Codex in GitHub

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

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

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

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

Comment thread src/utils.ts
Comment thread src/utils.ts
Comment thread src/utils.ts Outdated
Comment thread src/utils.ts

Copilot AI 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.

🔵 Needs a closer look

Two moderate issues in src/utils.ts must be addressed.

Review details

Suppressed comments (2)

src/utils.ts:3343

  • This suffix check classifies the last four characters of any longer contiguous period run as a terminal ellipsis. For example, at the final dot of Alpha.....5 was enough. this sets terminalEllipsis and sends the run through the new ellipsis path, splitting an input that the unchanged period-run policy (and the regression at test/tests.ts:7111-7117) requires to remain one sentence. Detect a complete three/four-dot run with non-dot neighbors, and share that predicate with the merger below.
    const spacedEllipsis = protectedPeriods[ellipsisCursor.index]?.boundary === index;
    const terminalEllipsis =
      spacedEllipsis || /\.{3,4}$/.test(input.slice(Math.max(0, index - 3), index + 1));

src/utils.ts:997

  • Because this search is limited to the current text fragment, an explicit '' Treebank opener whose closer follows a provisional ellipsis is tracked as a single quote rather than a Treebank double quote. A nested single quote can then clear that state, so a later ellipsis in the still-open outer span (for example ''Outer... 'Inner...' tail... Next'') is treated as outside the quote and may split. Check the full normalized source with an absolute offset, or carry the Treebank state across fragments.
  if ((flags & 2) === 0 && ellipsisLegacyQuotationState(text, index, false)) {
    state.double = true;
    state.doubleInsideSingle = state.single;
    return true;
  • Files reviewed: 2/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@mldangelo-oai

Copy link
Copy Markdown
Contributor Author

@codex review

Please review code and security on exact head 52adf66, including the complete integrated implementation and the last repair commit. All2,679 tests,98.23% branch coverage, source/test types, strict installed Biome, Markdown, build and packed consumers pass on its exact tree. All964 prior test registrations remain byte-for-byte and37 expanded regressions were added. Exact declared-toolchain CI is running separately; no blocked local installation was retried.

The repair consumes pending single closers before three-dot boundaries and preserves a following ASCII opener, adds existing single-guillemet family support to ellipsis state, shares the existing matched-angle metadata so unmatched compact comparisons cannot create false brackets, and classifies Treebank aliases using their complete normalized-source offsets. One inherited compact-angle feature gap is not claimed as a parent regression. Quotation-index first-pass extraction preserves its exact body and allocation; no new dependency or threshold change.

Prior actual Codex findings are addressed individually. Copilot's full-source alias issue is fixed; the suppressed five-dot/digit claim conflicts with the unchanged exact Alpha.....5 regression and the final digit-rejecting boundary gate. Continuation competitors, malformed alias recovery, real paired angles, numeric aside exclusions and quoted-angle competitors are covered. Three-dot repairs preserve the existing four-dot limitations, including misplaced closers in some spaced-single cases. Please critically inspect all findings, including suppressed claims, and report any reproducible introduced defect.

@mldangelo-oai

Copy link
Copy Markdown
Contributor Author

Critical reconciliation of Copilot review 5210970358 on b782e55, including both suppressed findings:

  • The full-source Treebank alias finding reproduces: ''Outer... 'Inner...' tail... Next'' incorrectly split when alias classification could see only a provisional fragment. Commit 52adf66 uses the existing normalized-source apostrophe cursor for this classification. Exact alias/explicit-backtick, nested, completed, prefixed and malformed controls are covered; no new index or prefix scan is added.
  • The proposed Alpha.....5 was enough. split does not reproduce. That exact unchanged regression passes in both modes, including all four Node CI lanes on b782 and the final 2,679-test local suite. The suffix detector is only routing: the final unspaced-period boundary requires a cased start and rejects a digit, so suffix matching is not evidence of an accepted split. A blanket run-length restriction would change the documented five-or-more-dot suffix priority; no such change was made.

The same additive commit addresses the four actual Codex findings, with separate thread replies. The preserved three-dot/four-dot scope, same-family quote ambiguity, numeric citation grammar and older four-dot misplaced-closer limits remain explicit. All 964 prior registrations are byte-for-byte unchanged; 37 expanded regression cases were added. Exact final-head CI and new Codex/security/Copilot reviews remain separate gates.

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 52adf6657b

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Another round soon, please!

Reviewed commit: 52adf6657b

ℹ️ About Codex in GitHub

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

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

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

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

Copilot AI 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.

🔵 Needs a closer look

Two moderate numeric boundary issues remain for four-dot and longer period runs.

Review details

Suppressed comments (2)

Previously missed (1) — in code that hasn't changed since the last review.

src/utils.ts:1595

  • The numeric branch here also fires after four- and longer contiguous dot runs. For the added period-run regression Alpha....5 was enough. (and Alpha.....5...), isUnspacedEllipsisStart therefore accepts a boundary before the number, producing a split even though the test requires the existing ambiguous contiguous-run behavior to remain one sentence. Numeric unspaced starts should be enabled only for an actual three-dot run, not the four-dot/longer path.

src/utils.ts:4933

  • When a four-dot spaced run is immediately followed by a digit, this still sets boundary to the final dot because periods >= 4 and sentenceStart is numeric. For example, Alpha . . . .5 was enough. is split at the dot, contradicting the regression at test/tests.ts:7111-7117 and the preserved shorter-run policy. Exclude the direct-digit four-dot ambiguity here while retaining whitespace-separated numeric starts and the >=5-dot decimal handling.
    const sentenceStart =
      numericSentenceStartReg.test(input.slice(next, next + 6)) ||
      (caseNeutral
        ? isCasedCharacter(following)
        : following.length > 0 && charIsUpperCase(following));
    let boundary = -1;
    if (periods >= 4 && sentenceStart) {
  • Files reviewed: 2/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@mldangelo-oai

Copy link
Copy Markdown
Contributor Author

Critical reconciliation of Copilot review 5211450915 on 52adf6657bbab9adbdd323d1ebc91b3fbb069f0f, including both suppressed claims:

Both claimed splits are contradicted by the complete control flow and the exact existing regressions, each of which asserts one sentence in both modes:

  • Alpha....5 was enough. and Alpha.....5 was enough.: isUnspacedEllipsisStart returns false at next === start because no opening delimiter was consumed. Its numeric branch is not reached for a bare adjacent digit. The later ordinary boundary check also rejects a digit after a period.
  • Alpha . . . .5 was enough.: spacedEllipsisRanges does nominate a candidate position. ellipsisSentenceEnd then sees the adjacent digit and calls the ordinary unspaced-boundary check, which rejects it before the end === index + 1 acceptance. A candidate range is not itself an accepted sentence boundary.

No source change was made for these claims. The unchanged exact fixtures passed in the 2,679-test local run and all four Node 18/20/22/24 lanes of the completed final-head CI run. An independent reviewer confirmed the same gate order and exact test/hash binding without repeating runtime tests. Existing whitespace-separated numeric starts, three-dot opening-delimiter behavior, and five-or-more-spaced-dot decimal handling remain unchanged. Codex code/security reports are clean on this head, and all ten actual checks pass. Bot COMMENTED reviews are not formal approvals.

@mldangelo-oai
mldangelo-oai merged commit daddea0 into main Sep 15, 2026
10 checks passed
@mldangelo-oai
mldangelo-oai deleted the mdangelo/codex/rouge-terminal-ellipses-20260824 branch September 15, 2026 14:41
@mldangelo-oai
mldangelo-oai restored the mdangelo/codex/rouge-terminal-ellipses-20260824 branch September 15, 2026 19:04
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