Skip to content

chore: Use Codex#254

Merged
kdy1 merged 3 commits intomainfrom
kdy1/dev
Feb 13, 2026
Merged

chore: Use Codex#254
kdy1 merged 3 commits intomainfrom
kdy1/dev

Conversation

@kdy1
Copy link
Copy Markdown
Contributor

@kdy1 kdy1 commented Feb 13, 2026

No description provided.

@kdy1 kdy1 marked this pull request as ready for review February 13, 2026 07:28
Copilot AI review requested due to automatic review settings February 13, 2026 07:28
@kdy1 kdy1 enabled auto-merge (squash) February 13, 2026 07:28
@kdy1 kdy1 merged commit 28b02f3 into main Feb 13, 2026
14 checks passed
@kdy1 kdy1 deleted the kdy1/dev branch February 13, 2026 07:28
@claude
Copy link
Copy Markdown
Contributor

claude bot commented Feb 13, 2026

Pull Request Review - PR #254

Summary

This PR performs a significant refactoring of the skills/configuration structure:

  • Removes: Legacy .opencode/ and .claude/ skill directories and configuration files
  • Adds: New .agents/skills/vercel-composition-patterns/ skill with React composition patterns
  • Updates: References in .agents/skills/vercel-react-best-practices/
  • Net change: -4,954 deletions, +1,906 additions

Code Quality Assessment

✅ Strengths

  1. Well-structured documentation: The new vercel-composition-patterns skill is excellently organized with:

    • Clear SKILL.md with metadata and usage guidelines
    • Comprehensive AGENTS.md compilation (~946 lines)
    • Individual rule files with consistent structure (frontmatter, incorrect/correct examples)
    • Proper priority categorization (HIGH/MEDIUM impact)
  2. High-quality content: Rule files demonstrate:

    • Clear anti-patterns vs. best practices
    • Real-world React examples (composition, context, state management)
    • Proper TypeScript typing
    • Good explanations of "why" not just "what"
  3. Consistent formatting: All markdown files follow a uniform structure:

    ---
    title: Rule Name
    impact: CRITICAL/HIGH/MEDIUM
    impactDescription: brief description
    tags: comma, separated, tags
    ---
  4. Modern React patterns: Covers React 19 changes (use() instead of useContext(), ref as regular prop)

⚠️ Areas of Concern

  1. Migration clarity:

    • The PR title "chore: Use Codex" doesn't clearly explain the migration from .opencode/.agents/ structure
    • Empty PR description - should explain the reasoning for this restructuring
    • Commit messages are minimal ("remove", "skills", "rmove" [typo])
  2. Potential breaking changes:

    • Removes .claude/settings.json (12 lines) without showing what was configured
    • Removes .claude/commands/work.md
    • Removes symlinks from .claude/skills/ and .opencode/skills/
    • No indication if these were actively used or how consumers should migrate
  3. Incomplete cleanup:

    • Removes entire CLAUDE.md (50 lines) - this is typically used for project-level conventions
    • No replacement guidance provided
    • May impact existing workflows that depend on these files
  4. Documentation gaps:

    • No README or migration guide explaining the new .agents/ structure
    • No explanation of relationship between AGENTS.md vs individual rule files
    • Missing test coverage information (documentation-only change, but worth noting)

🔍 Specific Observations

File: .agents/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md

  • Excellent examples showing boolean prop proliferation → composition refactoring
  • Clear before/after code samples
  • Impact correctly marked as CRITICAL

File: .agents/skills/vercel-composition-patterns/rules/state-context-interface.md

  • Outstanding explanation of dependency injection via context
  • Shows how same UI components work with different state providers
  • Good TypeScript interface design (state/actions/meta separation)

File: .agents/skills/vercel-composition-patterns/rules/react19-no-forwardref.md

  • Correctly documents React 19 API changes
  • Appropriately marked as MEDIUM impact with version warning

Performance Considerations

  • No runtime code changes (documentation only)
  • Large deletion of duplicated content in .opencode/ vs .agents/ suggests deduplication effort
  • Net reduction in repository size is positive

Security Concerns

  • No security issues identified
  • All changes are documentation/configuration related
  • No secrets or credentials involved

Test Coverage

  • N/A - this is a documentation/configuration refactoring
  • No application code modified
  • Consider: If these skills are consumed by automated tools, integration tests may be needed

Recommendations

Required for merge:

  1. Add PR description explaining:

    • Why migrating from .opencode/.agents/
    • What "Codex" refers to
    • Impact on existing users/workflows
    • Migration path for anyone using old structure
  2. Clarify removal of CLAUDE.md:

    • Was this moved elsewhere?
    • Should project conventions be documented in new location?
    • Add a migration note if conventions changed
  3. Fix commit message typo: "rmove" → "remove"

Recommended:

  1. Add migration documentation:

    • Create .agents/README.md explaining the new structure
    • Document the relationship between SKILL.md, AGENTS.md, and rule files
    • Explain how skills are discovered/loaded
  2. Consider keeping a deprecation notice:

    • Add .opencode/README.md pointing to new location
    • Add .claude/README.md with migration instructions
    • Helps users who clone older commits
  3. Improve commit messages: Use conventional commits format:

    • refactor: migrate skills from .opencode to .agents structure
    • feat: add vercel-composition-patterns skill
    • chore: remove deprecated .claude configuration

Verdict

Conditionally approve pending:

  • Addition of PR description explaining the migration rationale
  • Clarification on CLAUDE.md removal
  • Fix commit message typo

The code quality of the new documentation is excellent, but the migration needs better communication to prevent confusion for future contributors.


Review Impact: Documentation refactoring with potential breaking changes to workflows
Reviewer confidence: High (all changes are in documentation/config files)

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR appears to migrate agent/project guidance away from Claude/OpenCode-specific config (CLAUDE.md, .claude/, .opencode/) toward the repo’s .agents/-based skills and documentation, while adding a new “vercel-composition-patterns” skill set.

Changes:

  • Remove Claude/OpenCode configuration and bundled skill documents (CLAUDE.md, .claude/, .opencode/skill/...).
  • Add a new .agents/skills/vercel-composition-patterns skill (rules + compiled AGENTS.md).
  • Slightly edit .agents/skills/vercel-react-best-practices/AGENTS.md wording.

Reviewed changes

Copilot reviewed 70 out of 70 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
CLAUDE.md Removes Claude-specific project instructions (now duplicated in root AGENTS.md in the repo).
.opencode/skills/web-design-guidelines Removes OpenCode skill pointer.
.opencode/skills/vercel-react-best-practices Removes OpenCode skill pointer.
.opencode/skill/web-design-guidelines/SKILL.md Removes OpenCode skill definition/content.
.opencode/skill/vercel-react-best-practices/rules/server-serialization.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/server-parallel-fetching.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/server-cache-react.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/server-cache-lru.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/server-after-nonblocking.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/rerender-transitions.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/rerender-memo.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/rerender-lazy-state-init.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/rerender-functional-setstate.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/rerender-derived-state.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/rerender-dependencies.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/rerender-defer-reads.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/rendering-svg-precision.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/rendering-hoist-jsx.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/rendering-content-visibility.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/rendering-conditional-render.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/rendering-activity.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/js-tosorted-immutable.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/js-set-map-lookups.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/js-min-max-loop.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/js-length-check-first.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/js-index-maps.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/js-hoist-regexp.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/js-early-exit.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/js-combine-iterations.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/js-cache-storage.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/js-cache-property-access.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/js-cache-function-results.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/js-batch-dom-css.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/client-swr-dedup.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/client-event-listeners.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/bundle-preload.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/bundle-dynamic-imports.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/bundle-defer-third-party.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/bundle-conditional.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/bundle-barrel-imports.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/async-suspense-boundaries.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/async-parallel.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/async-dependencies.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/async-defer-await.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/async-api-routes.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/advanced-use-latest.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/advanced-event-handler-refs.md Removes OpenCode rule content.
.opencode/skill/vercel-react-best-practices/rules/_template.md Removes OpenCode rule template.
.opencode/skill/vercel-react-best-practices/rules/_sections.md Removes OpenCode sections metadata.
.opencode/skill/vercel-react-best-practices/metadata.json Removes OpenCode skill metadata.
.opencode/skill/vercel-react-best-practices/SKILL.md Removes OpenCode skill overview.
.opencode/skill/vercel-react-best-practices/README.md Removes OpenCode skill README.
.opencode/skill/vercel-react-best-practices/AGENTS.md Removes OpenCode compiled guide.
.claude/skills/web-design-guidelines Removes Claude skill pointer.
.claude/skills/vercel-react-best-practices Removes Claude skill pointer.
.claude/settings.json Removes Claude settings.
.claude/commands/work.md Removes Claude command helper.
.agents/skills/vercel-react-best-practices/AGENTS.md Small wording change in existing .agents skill content.
.agents/skills/vercel-composition-patterns/rules/state-lift-state.md Adds composition/state-lifting guidance (new).
.agents/skills/vercel-composition-patterns/rules/state-decouple-implementation.md Adds provider-vs-UI separation guidance (new).
.agents/skills/vercel-composition-patterns/rules/state-context-interface.md Adds context interface/DI guidance (new).
.agents/skills/vercel-composition-patterns/rules/react19-no-forwardref.md Adds React 19 notes (new).
.agents/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md Adds explicit variant pattern (new).
.agents/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md Adds children-over-render-props guidance (new).
.agents/skills/vercel-composition-patterns/rules/architecture-compound-components.md Adds compound components guidance (new).
.agents/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md Adds avoid-boolean-props guidance (new).
.agents/skills/vercel-composition-patterns/SKILL.md Adds skill metadata/entrypoint (new).
.agents/skills/vercel-composition-patterns/AGENTS.md Adds compiled composition-patterns guide (new).

Comment on lines +285 to +287
onChange={(text) => sync.updateInput(text)}
/>
<Composer.Submit onPress={() => sync.submit()} />
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

In this “Incorrect” example, sync.updateInput / sync.submit are used but sync is never defined (the snippet destructures submit/updateInput instead). This will not compile as written; update the snippet and then regenerate this compiled AGENTS.md so it stays consistent.

Suggested change
onChange={(text) => sync.updateInput(text)}
/>
<Composer.Submit onPress={() => sync.submit()} />
onChange={(text) => updateInput(text)}
/>
<Composer.Submit onPress={() => submit()} />

Copilot uses AI. Check for mistakes.
function ChannelComposer({ channelId }: { channelId: string }) {
// UI component knows about global state implementation
const state = useGlobalChannelState(channelId)
const { submit, updateInput } = useChannelSync(channelId)
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

In the “Incorrect” example, useChannelSync() is destructured into submit and updateInput, but those bindings are never used. This makes the example inconsistent and also hides the actual coupling being demonstrated; use the destructured functions directly or rename the returned object and use that consistently.

Suggested change
const { submit, updateInput } = useChannelSync(channelId)
const sync = useChannelSync(channelId)

Copilot uses AI. Check for mistakes.
Comment on lines +51 to +53
<ComposerContext value={{ state, actions, meta }}>
{children}
</ComposerContext>
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

The context provider usage is incorrect: createContext() returns a Context object; you need to render <ComposerContext.Provider value={...}>, not <ComposerContext value={...}>. As written, the example won’t compile.

Suggested change
<ComposerContext value={{ state, actions, meta }}>
{children}
</ComposerContext>
<ComposerContext.Provider value={{ state, actions, meta }}>
{children}
</ComposerContext.Provider>

Copilot uses AI. Check for mistakes.
Comment on lines +103 to +112

return (
<ComposerContext
value={{
state,
actions: { update, submit },
meta: { inputRef },
}}
>
{children}
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

Same issue here: <ComposerContext value={...}> should be <ComposerContext.Provider value={...}> so the context is correctly provided.

Copilot uses AI. Check for mistakes.
Comment on lines +191 to +193
<ComposerContext value={{ state, actions, meta }}>
{children}
</ComposerContext>
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

This snippet uses <ComposerContext value={...}>, but to provide context you need <ComposerContext.Provider value={...}>. Since this file is the compiled/consumed guide, it should be regenerated after fixing the source rule content so readers don’t copy broken code.

Suggested change
<ComposerContext value={{ state, actions, meta }}>
{children}
</ComposerContext>
<ComposerContext.Provider value={{ state, actions, meta }}>
{children}
</ComposerContext.Provider>

Copilot uses AI. Check for mistakes.
Comment on lines +26 to +28
onChange={(text) => sync.updateInput(text)}
/>
<Composer.Submit onPress={() => sync.submit()} />
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

sync is referenced (sync.updateInput, sync.submit) but no sync variable is defined in this snippet; it will not compile as written. Use the destructured updateInput/submit functions (or assign const sync = useChannelSync(channelId) and use sync.*).

Suggested change
onChange={(text) => sync.updateInput(text)}
/>
<Composer.Submit onPress={() => sync.submit()} />
onChange={(text) => updateInput(text)}
/>
<Composer.Submit onPress={() => submit()} />

Copilot uses AI. Check for mistakes.
Comment on lines +84 to +92
const submit = useForwardMessage()

return (
<ComposerContext
value={{
state,
actions: { update: setState, submit },
meta: { inputRef },
}}
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

This provider example uses <ComposerContext value={...}>, but it should be <ComposerContext.Provider value={...}> to actually provide context. Otherwise the snippet won’t compile / won’t provide the value to consumers.

Copilot uses AI. Check for mistakes.
}

function ForwardButton() {
const { actions } = use(Composer.Context)
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

use(Composer.Context) is referenced, but the docs elsewhere define the context as ComposerContext (and the example provider is <Composer.Provider ...>). Unless Composer.Context is an actual exported context API, this looks like a typo/inconsistency that will confuse readers; use the same context identifier consistently (e.g., use(ComposerContext)).

Suggested change
const { actions } = use(Composer.Context)
const { actions } = use(ComposerContext)

Copilot uses AI. Check for mistakes.
Comment on lines +12 to +16
In React 19, `ref` is now a regular prop (no `forwardRef` wrapper needed), and `use()` replaces `useContext()`.

**Incorrect (forwardRef in React 19):**

```tsx
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

The text labels forwardRef and useContext() as “Incorrect” in React 19, but both APIs remain valid/supported; React 19 adds alternatives (ref as a prop, and use(Context)), it doesn’t make the old APIs wrong. Consider rewording to “Prefer …” / “Alternative …” to avoid spreading misinformation in the skill docs.

Copilot uses AI. Check for mistakes.
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