Skip to content

Harden Windows runtime and skill precedence - #80

Merged
rebel0789 merged 15 commits into
mainfrom
agent/pr-maintenance-sweep
Jul 29, 2026
Merged

Harden Windows runtime and skill precedence#80
rebel0789 merged 15 commits into
mainfrom
agent/pr-maintenance-sweep

Conversation

@rebel0789

@rebel0789 rebel0789 commented Jul 29, 2026

Copy link
Copy Markdown
Owner

Summary

  • add Ubuntu and Windows CI coverage plus cross-platform smoke and stress fixtures
  • terminate Windows tunnel shim process trees and discard stale runtime status
  • choose one deterministic active skill per name, preferring workspace skills over user and plugin copies
  • preserve explicit source and path overrides for intentionally loading suppressed duplicate skills
  • fix macOS and Windows canonical-path behavior discovered while validating the contributed changes

Contributor credit

Why

The original branches were based on an older main and conflicted after PR #79. This PR is the integration branch that preserves their authorship while resolving those conflicts against the current release.

Validation

  • npm ci
  • npm run build
  • all smoke suites, including skill-precedence-smoke
  • npm run stress
  • npm audit --audit-level=high - 0 vulnerabilities
  • npm run release:pack
  • git diff --check
  • GitHub Actions on Ubuntu and Windows

Integrates and supersedes #69 and #77.

@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: 99332bc0c5

ℹ️ 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/capabilitiesOps.ts
maxSkills,
precedence
);
if (skillFiles.length >= maxSkills) break;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Count active winners before enforcing max_skills

When an earlier root contains duplicate skill names, this break applies maxSkills to raw files before activeSkillRecords removes duplicates. For example, with max_skills: 2, two .codex/skills files named dup fill the limit, collapse to one result, and prevent a distinct .agents/skills skill from being scanned, so inventory returns fewer than the requested maximum and may hide valid user/plugin skills. Continue scanning lower-precedence roots until the active winner set reaches the limit, while retaining a separate bounded raw-scan safeguard.

Useful? React with 👍 / 👎.

@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: 79715cb7d8

ℹ️ 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 scripts/codexpro.mjs
const stat = fs.statSync(resolved);
if (!stat.isDirectory()) throw new Error(`Not a directory: ${resolved}`);
return fs.realpathSync(resolved);
return fs.realpathSync.native(resolved);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve profiles across the realpath implementation change

On Windows installations where fs.realpathSync.native() returns a different spelling from the prior fs.realpathSync() result (for example, canonical casing or a junction-resolved form), upgrading changes the root string passed to the unchanged hash-based profilePathForRoot. Existing profile and runtime files remain under the old hash, so settings show and start silently stop loading saved ports, tunnel credentials, and other configuration. Add a fallback lookup or migration using the legacy root identity before switching exclusively to the native representation.

Useful? React with 👍 / 👎.

@rebel0789
rebel0789 merged commit 9b2a0ba into main Jul 29, 2026
2 checks passed
@rebel0789
rebel0789 deleted the agent/pr-maintenance-sweep branch July 29, 2026 12:56

@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: 2d0ce90686

ℹ️ 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 .github/workflows/ci.yml
Comment on lines +39 to +40
- name: Stress Test
run: npm run stress

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Fix combined-output truncation before gating CI on stress

On runners where bash -lc emits any startup diagnostic to stderr, this newly mandatory npm run stress step fails: runBash retains maxOutputBytes + 1 across stdout and stderr together, but src/bashOps.ts determines truncated for each stream separately. I reproduced the failure twice in this repository, where the streams totaled 4001 retained bytes while neither individually exceeded 4000, producing truncated: false and failing runBashOutputTerminationStress. Track truncation from the combined observed byte count before making the stress suite a CI gate.

Useful? React with 👍 / 👎.

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.

3 participants