GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Scrub color env in hermetic test children by mikolalysenko · Pull Request #1964 · SocketDev/socket-patch

Conversation

@mikolalysenko

@mikolalysenko Mikola Lysenko (mikolalysenko) commented Nov 2, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Collaborator

LLM Description written by Claude Code:claude-opus-5-5

Fixes #1958

Register row T59 (register); living document Part 5 (tests).

Why

hermetic::command removed the SOCKET_* env but none of the env the CLI's color and width policy reads (ui::color_enabled, ui::width_of). An ambient CLICOLOR_FORCE=1 put ANSI codes into captured stdout. Its HOSTILE_SEEDS were set and then removed by the same list, so a dropped scrub line could never show up in a test.

Changes (test-only)

  • tests/common/hermetic.rs
    • Adds COLOR_ENV (NO_COLOR, CLICOLOR, CLICOLOR_FORCE, COLUMNS), which command removes. pty_command inherits this. TERM is left alone because the PTY suites choose their own.
    • Deletes HOSTILE_SEEDS, its seed loop and the false "turns tests red" doc. Deletes the Extra::Yarn/Pnpm/Bundle seed-then-remove pairs and their docs.
    • Keeps by-name removal of SOCKET_UPDATE_BASE_URL/SOCKET_UPDATE_STATE_DIR. They aren't flag-bound, and the deleted seed loop was the only thing removing them by name.
    • The module doc now says that only run_bin_with_env (and suites that call jvm_env::isolate_cli) pin HOME. Moving the pin into command would change HOME for about 150 suites and their package-manager grandchildren. That is a separate, riskier change, so this PR only corrects the doc.
  • tests/spawn_env_hygiene.rs
    • Replaces command_never_leaks_its_hostile_seeds and the PTY variant with command_scrubs_hostile_ambient_env and pty_command_scrubs_hostile_ambient_env_and_keeps_caller_env. Both set every GLOBAL_ARG_ENV_VARS/LOCAL_ARG_ENV_VARS name (except the 3 forced opt-outs), the token, the update vars and the color env in the test process, then assert the child never sees any of them.
    • Deletes extra_seeds_are_scrubbed_whatever_the_ambient_value. It could not fail, because the ambient-seeded Extra tests above it already cover the same thing.
  • Stale comments: fixed the hostile-seed comments in e2e_golang_build.rs, e2e_vendored_production.rs and vendor/e2e_golang_redirect.rs.

Evidence

  • On main @ cbbbdb9, CLICOLOR_FORCE=1 cargo test -p socket-patch-cli --test cli_parse_list fails populated_manifest_plain_lists_full_record_via_binary (68/1). On this branch it passes 69/69, and also with CLICOLOR_FORCE=1 NO_COLOR= COLUMNS=20.
  • Red→green: with CLICOLOR_FORCE removed from COLOR_ENV, both canary tests fail with ambient CLICOLOR_FORCE must be scrubbed.
  • With CLICOLOR_FORCE=1 COLUMNS=20, the cli, scan, update, rollback and remove suites pass: 654 tests, including the PTY render and prompt tests.
  • spawn_env_hygiene passes 19/19. clippy -D warnings is clean on spawn_env_hygiene. e2e_vendored_production's clippy --tests errors are pre-existing on main, and this PR changes only comments there.

Size

+69 / −82 across 5 test files. No production lines change.

Behavior

None in the product. Test children no longer inherit NO_COLOR/CLICOLOR/CLICOLOR_FORCE/COLUMNS, and a test that wants them sets them explicitly, after command.

Risk

Low. The change is test-only and no cfg(windows) code changed.

/code-review high raised 6 findings and all are fixed: the by-name update-var removal, 2 stale comments, the doc reflow, the PTY test's Option round-trip, and the canary now seeding every flag-bound var.

🤖 Generated with Claude Code

https://claude.ai/code/session_011f9aePX7rzgjWUhucTZmxi


Note

Low Risk
Test-only changes to hermetic spawn helpers and hygiene tests; no production code paths modified.

Overview
Hermetic test spawns no longer inherit terminal color/width env (NO_COLOR, CLICOLOR, CLICOLOR_FORCE, COLUMNS), which the CLI uses for output formatting—so ambient values like CLICOLOR_FORCE=1 stop polluting captured stdout assertions.

The old HOSTILE_SEEDS pattern (set hostile values then remove them in the same builder) is removed because it could never fail if a scrub line was dropped. spawn_env_hygiene now seeds the full hostile set in the test process (flag-bound SOCKET_*, token/update vars, color env) and asserts the child never sees them; the same approach replaces the PTY canary. Package-manager Extra scrubs (Yarn/Pnpm/Bundle) drop their seed-then-remove steps; command still removes SOCKET_UPDATE_BASE_URL / SOCKET_UPDATE_STATE_DIR by name. Docs/comments in a few e2e files are updated to match.

Product behavior is unchanged—test harness only (~+69/−82 lines).

Reviewed by Cursor Bugbot for commit df7d599. Configure here.


Generated by Claude Code

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@claude
Start #1958 hermetic color env
8770d4a
Assisted-by: Claude Code:claude-opus-5-5
@mikolalysenko Mikola Lysenko (mikolalysenko) added refactor Structural change: duplicated code or logic, missing abstraction, layering, dead code arch-refactor PR opened by the scheduled architecture refactor routine labels Nov 2, 2026
Claude (claude) added 2 commits November 2, 2026 00:59
@claude
Scrub color env in hermetic test children
90fc905
hermetic::command now removes NO_COLOR, CLICOLOR, CLICOLOR_FORCE and
COLUMNS, so an ambient CLICOLOR_FORCE=1 no longer puts ANSI codes into
captured stdout (it failed a cli_parse_list test). TERM is left to the
PTY suites.

The HOSTILE_SEEDS list and the Yarn/Pnpm/Bundle seeds are deleted:
each seed was removed right after it was set, so a dropped scrub could
never show. spawn_env_hygiene now sets the hostile values in the test
process and asserts the child (piped and PTY) never sees them. The
module doc now says which builder pins HOME.

Assisted-by: Claude Code:claude-opus-5-5
@claude
Seed every flag-bound var in the env canary
df7d599
The canary now sets every GLOBAL/LOCAL_ARG_ENV_VARS name, so a new
flag-bound var is covered without a hand-kept list. command keeps the
by-name removal of SOCKET_UPDATE_BASE_URL and SOCKET_UPDATE_STATE_DIR
that the deleted seed loop used to give. Stale seed comments in the
golang and vendored-production suites now point at spawn_env_hygiene.

Assisted-by: Claude Code:claude-opus-5-5
@mikolalysenko
Mikola Lysenko (mikolalysenko) marked this pull request as ready for review November 2, 2026 01:14
@mikolalysenko

Mikola Lysenko (mikolalysenko) commented Nov 2, 2026

Copy link
Copy Markdown
Collaborator Author

BugBot review


Generated by Claude Code

cursor[bot] reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

Mikola Lysenko (mikolalysenko) pushed a commit that referenced this pull request Nov 2, 2026
@claude
refactor: T59 in PR #1964
152b376
Assisted-by: Claude Code:claude-opus-5-5
cursor[bot]
cursor Bot reviewed Nov 2, 2026
View reviewed changes

@cursor cursor Bot left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit df7d599. Configure here.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Mikola Lysenko (mikolalysenko) pushed a commit that referenced this pull request Nov 2, 2026
@claude
refactor: #1964 CI and Bugbot green
d68459b
Assisted-by: Claude Code:claude-opus-5-5
@mikolalysenko Mikola Lysenko (mikolalysenko) added the Ready for review Agent-verified: mergeable, CI green, Bugbot clean — awaiting human review label Nov 2, 2026
@mikolalysenko

Mikola Lysenko (mikolalysenko) commented Nov 2, 2026

Copy link
Copy Markdown
Collaborator Author

[burn-down agent] Labeled Ready for review at df7d599.

  • CI: 82/82 check runs on df7d599 passed or were skipped (32 success, 50 skipped). The PR is mergeable and doesn't touch CHANGELOG.md.
  • Bugbot reviewed df7d599 and found nothing new. No review threads are open.
  • For the reviewer: the change is test-only. Hermetic test children no longer inherit NO_COLOR/CLICOLOR/CLICOLOR_FORCE/COLUMNS. spawn_env_hygiene now seeds hostile values in the parent instead of setting and removing them in the same builder.
  • Slack: not announced. The Slack send tool wasn't available in this run, so the next run should retry.

Generated by Claude Code

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@mikolalysenko

Mikola Lysenko (mikolalysenko) commented Nov 2, 2026

Copy link
Copy Markdown
Collaborator Author

Final review brief

What it does. Test-only. hermetic::command now also strips the CLI's color/width env (NO_COLOR, CLICOLOR, CLICOLOR_FORCE, COLUMNS) from spawned test children, so an ambient CLICOLOR_FORCE=1 can no longer put ANSI codes into captured stdout. It also deletes the HOSTILE_SEEDS set-then-remove pairs, which could never catch a dropped scrub. In their place, canary tests set the hostile values in the test process and assert the child never sees them.

Risk: low. No production code changes. The scrub only gets stricter. The one behavior change is that test children no longer inherit COLUMNS/NO_COLOR, and the PTY and render suites pass in CI.

Look here

  • hermetic.rs:40: the new COLOR_ENV list. TERM is deliberately not on it.
  • hermetic.rs:63-82: command. The seed loop is gone, and SOCKET_UPDATE_* are still removed by name.
  • spawn_env_hygiene.rs:245: hostile_ambient(), which seeds every flag-bound var except the forced opt-outs, plus the token, update and color vars.
  • spawn_env_hygiene.rs:265 and :361: the command and PTY canaries. Both are #[serial] and restore the env through with_ambient.

Verified

  • I read the full diff (5 test files, +69/−82).
  • cargo test -p socket-patch-cli --test spawn_env_hygiene: 19/19 pass.
  • CLICOLOR_FORCE=1 COLUMNS=20 cargo test --test cli_parse_list: 69/69 pass. The PR reports that main fails this test.
  • clippy -D warnings is clean on spawn_env_hygiene.
  • No HOSTILE_SEEDS references remain, and CHANGELOG.md is untouched.
  • CI: ci-ok and clippy are green, with 32 checks passing and 50 skipped. Cursor Bugbot passed. There are no unresolved threads.

Changes I made: none.

Open questions: none. Note that command still leaves HOME alone, and the PR explicitly defers that riskier change.

Auto-merge is armed, so approving sends this straight to the merge queue.


Generated by Claude Code

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@mikolalysenko
Mikola Lysenko (mikolalysenko) enabled auto-merge November 2, 2026 02:55
This was referenced Nov 2, 2026
test(cli): parse suites onto hermetic::try_parse (T56) #1978
Merged
hermetic test children inherit GOFLAGS, GOENV, GOWORK, GOPATH and GOMODCACHE, which the go crawler and apply read; two hosted-production Go/Deno tests can't fail #1981
Open
Share one copy_tree across the test suites #1988
Merged
Wenxin-Jiang
Wenxin Jiang (Wenxin-Jiang) approved these changes Nov 2, 2026
View reviewed changes

@Wenxin-Jiang Wenxin Jiang (Wenxin-Jiang) left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

[agent] Reviewed df7d599bde11417b8194bd6f8534b5626db59b24. Checked color/environment scrubbing and hostile-ambient regression coverage for regular and PTY children. No major correctness issues found. Validation: source and regression-test review plus the available exact-head CI checks; no local test pass is claimed.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@mikolalysenko
Mikola Lysenko (mikolalysenko) added this pull request to the merge queue Nov 2, 2026
Merged via the queue into main with commit c1e4298 Nov 2, 2026
82 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@mikolalysenko
Mikola Lysenko (mikolalysenko) deleted the arch-refactor/1958-hermetic-color-env branch November 2, 2026 16:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@cursor cursor[bot] cursor[bot] left review comments
@Wenxin-Jiang Wenxin Jiang (Wenxin-Jiang) Wenxin-Jiang approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

arch-refactor PR opened by the scheduled architecture refactor routine Ready for review Agent-verified: mergeable, CI green, Bugbot clean — awaiting human review refactor Structural change: duplicated code or logic, missing abstraction, layering, dead code

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

hermetic::command leaves color env ambient (CLICOLOR_FORCE=1 fails a list test), and its HOSTILE_SEEDS seed-then-remove the same list so they can never catch a dropped scrub

Uh oh!

There was an error while loading. Please reload this page.

3 participants

@mikolalysenko @Wenxin-Jiang @claude
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.