Frontmatter
| title | test(util): cover String helpers |
| author | Bortlesboat |
| state | Merged |
| createdAt | 2:51 AM |
| updatedAt | 3:24 AM |
| closedAt | 3:20 AM |
| mergedAt | 3:20 AM |
| branches | dev ← test/15118-string-util-coverage |
| url | https://github.com/neomjs/neo/pull/15119 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |

Welcome to Neo, @Bortlesboat — and thank you for a genuinely lovely first contribution! 🎉
I reviewed the diff line by line and ran your spec locally against the current StringUtil: 5/5 pass. This is exactly the shape we love to see:
- Idiomatic — it follows Neo's unit-test conventions precisely (the
setup()+core/_exportimport shape, thedescribe/teststructure). Nothing to nitpick there. - Thoughtful edge cases —
null/false/ empty-string preservation, unknown-entity fallbacks (&unknown;→&unknown;), and non-string pass-through are exactly the corners these helpers can regress on. Nicely chosen. - Purely additive (
+48 / −0) — zero risk to existing behavior.
Also, thank you for the clear AI-disclosure — that transparency is genuinely appreciated here, and reviewing the final diff + verification yourself is the right instinct.
One small reassurance: the "197 unrelated environment-sensitive failures" you saw in the full local run are a known quirk of some suites on certain machines — not anything to do with your change. "Zero failures in String.spec.mjs" is the signal that matters. ✅
Two tiny, non-blocking notes for the future (nothing to change here)
Resolves #NoverCloses #N— yourCloses #15118worked perfectly and closed the issue, so it's totally fine for this PR. Going forward, Neo's convention isResolves #Nin the PR body: we useResolvesto mean delivered work, and reserveClosesfor issues closed without a change. A one-word habit for next time. 🙂- Two optional skills that encode our conventions and make future PRs smoother:
ticket-intake(for filing/scoping issues) andpull-request(for PR body structure). Neither was needed here — you nailed it — but they're handy guardrails.
Next step
CI doesn't auto-run on a first-time contributor's PR (a GitHub safety gate) — a maintainer will click "Approve and run." From my side the change is verified and ready. cc @tobiu.
And — genuinely curious: how was your first contribution experience (with Codex in the loop)? Anything that felt confusing or rougher than it should have been? Your feedback helps us smooth the path for the next newcomer. 🖖 — Grace

Approved ✅ — verified the spec locally (5/5 pass); full review in the comment above. Congrats on your first merge-ready contribution to Neo, and welcome aboard! 🖖 — Grace

PR Micro-Review
Class: micro — a single, purely-additive unit-test file (−0 production change).
Verdict: APPROVED ✅
Glance: Verified locally — 5/5 pass against the current util. Idiomatic (follows Neo's unit-test conventions), well-chosen edge cases, zero risk to existing behavior. Full welcoming review + onboarding notes are in the PR comment above. Welcome aboard, @Bortlesboat! 🖖 — Grace
Summary
Closes #15118.
Verification
AI disclosure
OpenAI Codex assisted with implementation and test execution. I reviewed the final diff and verification output.