Skip to content

fix(skills): bundle split oo skill references#67

Merged
BlackHole1 merged 4 commits into
mainfrom
improve
Apr 15, 2026
Merged

fix(skills): bundle split oo skill references#67
BlackHole1 merged 4 commits into
mainfrom
improve

Conversation

@BlackHole1
Copy link
Copy Markdown
Member

Why: The oo skill now reads focused reference files instead of one monolithic contract, so bundled installs would miss required docs and drift from the checked-in ownership content.

What: Split the oo guidance into dedicated reference documents for Codex and Claude, updated the Codex agent prompt, and registered each new reference in the embedded skill asset bundle.

How: Refreshed the embedded asset tests and the ownership assertion so the packaged skill output matches the new reference layout.

Why: The oo skill now reads focused reference files instead of one
monolithic contract, so bundled installs would miss required docs and
drift from the checked-in ownership content.

What: Split the oo guidance into dedicated reference documents for
Codex and Claude, updated the Codex agent prompt, and registered each
new reference in the embedded skill asset bundle.

How: Refreshed the embedded asset tests and the ownership assertion so
the packaged skill output matches the new reference layout.

Signed-off-by: Kevin Cui <bh@bugs.cc>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 15, 2026

Summary by CodeRabbit

Release Notes

  • Documentation

    • Reorganized and clarified guidance for the oo skill, splitting comprehensive reference material into focused guides covering authentication/billing, search workflows, package and connector execution, file transfers, and task lifecycle management.
    • Updated skill descriptions to emphasize routing practical file, media, and connector tasks through oo.
  • Tests & Build

    • Updated test expectations to reflect documentation restructuring.
    • Enhanced compilation reliability with transient retry logic for build processes.

Walkthrough

This PR replaces a single oo CLI contract with six focused reference documents (auth-and-billing, search-and-selection, package-execution, connector-execution, file-transfer, task-lifecycle), rewrites SKILL.md guidance for both codex and claude to scope oo to cloud/connector tasks, updates agent prompts, and updates embedded bundled-skill assets and tests to register the new reference files. It also modifies tests and packaged test helpers related to compilation retry behavior in the CI test suite.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested labels

codex

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title follows the required format and clearly describes the main change: splitting monolithic oo skill reference into multiple bundled files.
Description check ✅ Passed The description explains the problem (missing docs from split references), the solution (split guidance into dedicated documents and updated bundle registration), and the approach clearly.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

Warning

Review ran into problems

🔥 Problems

Timed out fetching pipeline failures after 30000ms


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 and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (6)
contrib/skills/claude/oo/SKILL.md (1)

90-90: Consider simplifying "outside of" to "outside".

The phrase "outside of" can be simplified to "outside" for conciseness. While both are grammatically correct, "outside" is more direct.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@contrib/skills/claude/oo/SKILL.md` at line 90, The phrase "outside of" in
SKILL.md should be simplified to "outside" for conciseness; locate the
occurrence near the line containing "**end the response** after reporting the
outcome. Never continue with work" and replace "outside of" with "outside",
preserving surrounding punctuation and capitalization and ensuring no change to
meaning or formatting in the SKILL.md content.
contrib/skills/codex/oo/SKILL.md (1)

88-88: Consider simplifying "outside of" to "outside".

The phrase "outside of" can be simplified to "outside" for conciseness. While both are grammatically correct, "outside" is more direct.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@contrib/skills/codex/oo/SKILL.md` at line 88, Replace each occurrence of the
phrase "outside of" with the simpler "outside" in the SKILL.md content; search
for the token "outside of" (e.g., within sentences like "end the response after
reporting the outcome. Never continue with work") and update them to "outside"
to improve conciseness while preserving original meaning and punctuation.
contrib/skills/codex/oo/references/package-execution.md (1)

118-121: Consider rephrasing to focus on observable behavior rather than implementation details.

Lines 118-121 mention "validation is patched" and describe "current local validation" behavior, which reveals internal implementation mechanics. Based on learnings, documentation should focus on user-facing contract (observable behavior) rather than internal implementation details like validation patching.

Consider rephrasing to describe the observable validation requirements without mentioning the patching mechanism. For example:

  • "File widget inputs require URI strings; local paths or binary payloads are not supported."
  • "Input handles with contentMediaType (except oomol/secret) are rejected during validation."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@contrib/skills/codex/oo/references/package-execution.md` around lines 118 -
121, Rewrite the two sentences to describe only observable behavior: replace
"File widget validation is patched to require URI strings instead of local paths
or binary payloads." with something like "File widget inputs require URI
strings; local file paths and binary payloads are not supported." and replace
"If an input handle schema contains `contentMediaType` and the value is not
`oomol/secret`, current local validation rejects it." with "Input handles that
include `contentMediaType` are rejected unless the value is `oomol/secret`."
Ensure you remove words implying internal mechanics (e.g., "patched", "current
local validation") and keep the references to File widget, `contentMediaType`,
and `oomol/secret` so the contract is clear.
contrib/skills/codex/oo/references/file-transfer.md (1)

25-25: Consider whether mentioning SQLite implementation is necessary.

Line 25 states "Successful uploads persist a local sqlite record," which reveals an internal storage implementation detail. Based on learnings, documentation should focus on user-facing contract rather than internal mechanics.

If the SQLite detail provides value to users (e.g., for troubleshooting or understanding persistence guarantees), it can remain. Otherwise, consider rephrasing to focus on observable behavior: "Successful uploads are recorded locally for tracking purposes."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@contrib/skills/codex/oo/references/file-transfer.md` at line 25, Update the
documentation sentence that currently reads "Successful uploads persist a local
sqlite record" to avoid leaking implementation details; either remove the
mention of SQLite and rephrase to a user-facing behavior such as "Successful
uploads are recorded locally for tracking purposes" or, if the SQLite detail is
needed for troubleshooting, expand it to justify why and how users can inspect
that record; change the exact string mentioned above accordingly.
contrib/skills/claude/oo/references/package-execution.md (1)

118-121: Consider rephrasing to focus on observable behavior rather than implementation details.

Lines 118-121 mention "validation is patched" and describe "current local validation" behavior, which reveals internal implementation mechanics. Based on learnings, documentation should focus on user-facing contract (observable behavior) rather than internal implementation details like validation patching.

Consider rephrasing to describe the observable validation requirements without mentioning the patching mechanism. For example:

  • "File widget inputs require URI strings; local paths or binary payloads are not supported."
  • "Input handles with contentMediaType (except oomol/secret) are rejected during validation."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@contrib/skills/claude/oo/references/package-execution.md` around lines 118 -
121, Replace the implementation-focused phrases "validation is patched" and
"current local validation rejects it" with user-facing, observable behavior
statements; specifically, change the two bullets to say: "File widget inputs
require URI strings; local filesystem paths and binary payloads are not
supported." and "Input handles that include contentMediaType (except
oomol/secret) are rejected by validation." Ensure you remove any mention of
patching or local/internal validation mechanics and keep the statements as
contract-level requirements.
contrib/skills/codex/oo/references/connector-execution.md (1)

1-108: Consider reducing doc duplication between Codex and Claude connector references.

This file is effectively identical to contrib/skills/claude/oo/references/connector-execution.md; consider generating both from one source (or enforcing sync checks) to prevent drift as behavior evolves.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@contrib/skills/codex/oo/references/connector-execution.md` around lines 1 -
108, The two docs contrib/skills/codex/oo/references/connector-execution.md and
contrib/skills/claude/oo/references/connector-execution.md are near-identical
and risk drifting; consolidate into a single source-of-truth and update build/CI
to prevent divergence by either (a) extracting the shared canonical content into
one file (e.g., contrib/skills/shared/oo/references/connector-execution.md) and
making the codex and claude files include or symlink that file, or (b) keep one
canonical file and add a CI sync check that fails the PR when the two files
differ; modify the repo layout and CI scripts accordingly and update any doc
references to point at the canonical symbol so future edits are made in one
place.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@contrib/skills/claude/oo/references/package-execution.md`:
- Around line 118-121: Replace the implementation-focused phrases "validation is
patched" and "current local validation rejects it" with user-facing, observable
behavior statements; specifically, change the two bullets to say: "File widget
inputs require URI strings; local filesystem paths and binary payloads are not
supported." and "Input handles that include contentMediaType (except
oomol/secret) are rejected by validation." Ensure you remove any mention of
patching or local/internal validation mechanics and keep the statements as
contract-level requirements.

In `@contrib/skills/claude/oo/SKILL.md`:
- Line 90: The phrase "outside of" in SKILL.md should be simplified to "outside"
for conciseness; locate the occurrence near the line containing "**end the
response** after reporting the outcome. Never continue with work" and replace
"outside of" with "outside", preserving surrounding punctuation and
capitalization and ensuring no change to meaning or formatting in the SKILL.md
content.

In `@contrib/skills/codex/oo/references/connector-execution.md`:
- Around line 1-108: The two docs
contrib/skills/codex/oo/references/connector-execution.md and
contrib/skills/claude/oo/references/connector-execution.md are near-identical
and risk drifting; consolidate into a single source-of-truth and update build/CI
to prevent divergence by either (a) extracting the shared canonical content into
one file (e.g., contrib/skills/shared/oo/references/connector-execution.md) and
making the codex and claude files include or symlink that file, or (b) keep one
canonical file and add a CI sync check that fails the PR when the two files
differ; modify the repo layout and CI scripts accordingly and update any doc
references to point at the canonical symbol so future edits are made in one
place.

In `@contrib/skills/codex/oo/references/file-transfer.md`:
- Line 25: Update the documentation sentence that currently reads "Successful
uploads persist a local sqlite record" to avoid leaking implementation details;
either remove the mention of SQLite and rephrase to a user-facing behavior such
as "Successful uploads are recorded locally for tracking purposes" or, if the
SQLite detail is needed for troubleshooting, expand it to justify why and how
users can inspect that record; change the exact string mentioned above
accordingly.

In `@contrib/skills/codex/oo/references/package-execution.md`:
- Around line 118-121: Rewrite the two sentences to describe only observable
behavior: replace "File widget validation is patched to require URI strings
instead of local paths or binary payloads." with something like "File widget
inputs require URI strings; local file paths and binary payloads are not
supported." and replace "If an input handle schema contains `contentMediaType`
and the value is not `oomol/secret`, current local validation rejects it." with
"Input handles that include `contentMediaType` are rejected unless the value is
`oomol/secret`." Ensure you remove words implying internal mechanics (e.g.,
"patched", "current local validation") and keep the references to File widget,
`contentMediaType`, and `oomol/secret` so the contract is clear.

In `@contrib/skills/codex/oo/SKILL.md`:
- Line 88: Replace each occurrence of the phrase "outside of" with the simpler
"outside" in the SKILL.md content; search for the token "outside of" (e.g.,
within sentences like "end the response after reporting the outcome. Never
continue with work") and update them to "outside" to improve conciseness while
preserving original meaning and punctuation.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: b07e14e2-877d-49fa-88e5-decdf67c7d46

📥 Commits

Reviewing files that changed from the base of the PR and between e57fa64 and 53ebf2b.

📒 Files selected for processing (20)
  • contrib/skills/claude/oo/SKILL.md
  • contrib/skills/claude/oo/references/auth-and-billing.md
  • contrib/skills/claude/oo/references/connector-execution.md
  • contrib/skills/claude/oo/references/file-transfer.md
  • contrib/skills/claude/oo/references/oo-cli-contract.md
  • contrib/skills/claude/oo/references/package-execution.md
  • contrib/skills/claude/oo/references/search-and-selection.md
  • contrib/skills/claude/oo/references/task-lifecycle.md
  • contrib/skills/codex/oo/SKILL.md
  • contrib/skills/codex/oo/agents/openai.yaml
  • contrib/skills/codex/oo/references/auth-and-billing.md
  • contrib/skills/codex/oo/references/connector-execution.md
  • contrib/skills/codex/oo/references/file-transfer.md
  • contrib/skills/codex/oo/references/oo-cli-contract.md
  • contrib/skills/codex/oo/references/package-execution.md
  • contrib/skills/codex/oo/references/search-and-selection.md
  • contrib/skills/codex/oo/references/task-lifecycle.md
  • src/application/commands/skills/embedded-assets.test.ts
  • src/application/commands/skills/embedded-assets.ts
  • src/application/commands/skills/index.test.ts
💤 Files with no reviewable changes (2)
  • contrib/skills/claude/oo/references/oo-cli-contract.md
  • contrib/skills/codex/oo/references/oo-cli-contract.md

The Windows CI job can fail while Bun downloads or extracts the
baseline executable used by the compiled binary test.
Retry only that known transient error and assert the retry
behavior so real compile failures still surface immediately.

Signed-off-by: Kevin Cui <bh@bugs.cc>
GitHub Actions on Windows can keep failing to download or extract
the Bun baseline executable even after multiple retries.
Treat only that known CI infrastructure error as skippable there
so unrelated changes do not fail while real compile errors still
surface everywhere else.

Signed-off-by: Kevin Cui <bh@bugs.cc>
The compile smoke test exercises the published binary flow, but
Windows CI was unstable because Bun compile downloads were flaky.
Skip that path on Windows, remove the platform-specific fallback,
and keep the slower compile coverage on Linux and macOS.

Signed-off-by: Kevin Cui <bh@bugs.cc>
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
contrib/ci/npm-packages.test.ts (2)

525-533: Allow sync test doubles for the injected retry hooks.

Lines 528-529 force callers to wrap trivial stubs in Promise-returning functions even though await already handles non-Promise values. Widening these hooks to void | Promise<void> / unknown | Promise<unknown> would make the helper easier to stub and remove the need for async no-op callbacks in the retry tests.

♻️ Proposed refactor
 async function compileExecutableWithTransientRetry(options: {
     outputPath: string;
     runCompile: () => CompileSpawnResult;
-    removeOutput?: (outputPath: string) => Promise<void>;
-    sleep?: (delayMs: number) => Promise<unknown>;
+    removeOutput?: (outputPath: string) => void | Promise<void>;
+    sleep?: (delayMs: number) => void | Promise<unknown>;
 }): Promise<void> {

As per coding guidelines, "Never mark a function async if it contains no await; remove async when all code paths are synchronous."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@contrib/ci/npm-packages.test.ts` around lines 525 - 533, The
compileExecutableWithTransientRetry helper currently types the injected hooks
removeOutput and sleep as returning Promises, forcing callers to wrap sync
stubs; update the options parameter in compileExecutableWithTransientRetry so
removeOutput is typed as (outputPath: string) => void | Promise<void> and sleep
is typed as (delayMs: number) => unknown | Promise<unknown>, and keep the same
default assignments (removeOutput => rm(...), sleep => Bun.sleep(...)) so both
synchronous and Promise-returning test doubles are accepted without extra async
wrappers.

90-90: Drop the unreachable Windows branch inside the skipped test.

Line 90 already turns this case into test.skip on Windows, so the condition at Line 322 is never false when this body runs. Making chmod() unconditional here keeps the success path flatter.

♻️ Proposed simplification
-                if (process.platform !== "win32") {
-                    await chmod(executablePath, 0o755);
-                }
+                await chmod(executablePath, 0o755);

As per coding guidelines, "Eliminate dead code: remove unused functions, parameters, type fields, unreachable branches, redundant error rethrows, and JSON.stringify() === undefined checks."

Also applies to: 322-324

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@contrib/ci/npm-packages.test.ts` at line 90, The test uses
compiledBinaryInstallTest (set to test.skip on win32) so the Windows branch
inside the test body is unreachable; remove the conditional branch that checks
platform and instead call chmod(...) unconditionally in the test. Locate the
test that uses compiledBinaryInstallTest and the inner platform check around
chmod (the conditional branch that only runs chmod when not win32) and delete
that branch, leaving a single, unconditional fs.chmod(...) call to simplify the
success path.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@contrib/ci/npm-packages.test.ts`:
- Around line 525-533: The compileExecutableWithTransientRetry helper currently
types the injected hooks removeOutput and sleep as returning Promises, forcing
callers to wrap sync stubs; update the options parameter in
compileExecutableWithTransientRetry so removeOutput is typed as (outputPath:
string) => void | Promise<void> and sleep is typed as (delayMs: number) =>
unknown | Promise<unknown>, and keep the same default assignments (removeOutput
=> rm(...), sleep => Bun.sleep(...)) so both synchronous and Promise-returning
test doubles are accepted without extra async wrappers.
- Line 90: The test uses compiledBinaryInstallTest (set to test.skip on win32)
so the Windows branch inside the test body is unreachable; remove the
conditional branch that checks platform and instead call chmod(...)
unconditionally in the test. Locate the test that uses compiledBinaryInstallTest
and the inner platform check around chmod (the conditional branch that only runs
chmod when not win32) and delete that branch, leaving a single, unconditional
fs.chmod(...) call to simplify the success path.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 5795626c-7e2a-461c-aa20-c3455af25581

📥 Commits

Reviewing files that changed from the base of the PR and between 53ebf2b and 09d8f9a.

📒 Files selected for processing (1)
  • contrib/ci/npm-packages.test.ts

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.

1 participant