feat: remove claude-self-obs plugin — hooks now managed by qyl.collector#155
feat: remove claude-self-obs plugin — hooks now managed by qyl.collector#155
Conversation
Hook lifecycle moved to qyl.collector via attach/detach endpoints. Users control observability via MCP tools (qyl.observe_claude / qyl.stop_observing_claude) or the dashboard Settings > Integrations toggle. - Delete plugins/claude-self-obs/ (plugin.json, README, hooks.json, status command) - Update marketplace.json: 11→10 plugins, 26→25 commands - Remove .gitignore exception for claude-self-obs/server/dist/ - Update test sessions: remove session-2-self-obs, renumber remaining - Add CHANGELOG removal entry
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (18)
Cache: Disabled due to data retention organization setting Knowledge base: Disabled due to data retention organization setting 📝 WalkthroughWalkthroughThis pull request removes the claude-self-obs plugin from the codebase and marketplace, introduces a new Codex-based PR review automation workflow with supporting schemas and prompts, updates the auto-merge workflow to recognize Codex approvals, and adds plugin testing infrastructure with structured test sessions. Changes
Sequence Diagram(s)sequenceDiagram
actor PR as Pull Request
participant Check as Check Changed Files
participant Gate as Gate Logic
participant Codex as Codex Review<br/>(openai/codex-action)
participant GitHub as GitHub API
participant Notify as Notify Results
PR->>Check: PR event received
Check->>Check: Determine if only automation<br/>files modified
alt Only automation files changed
Check-->>Notify: skip_codex = true
Notify->>GitHub: Post skip notification<br/>with alternative reviewers
else Other files modified
Check-->>Gate: skip_codex = false
Gate->>Gate: Check gating conditions:<br/>- Not draft PR<br/>- Not bot-authored<br/>- OPENAI_API_KEY available
alt Gating passes
Gate->>Codex: Execute review with prompt
Codex->>Codex: Analyze PR changes<br/>in read-only sandbox
Codex-->>Gate: Return structured output<br/>(event, body)
Gate->>GitHub: Map event to review action<br/>(APPROVE/REQUEST_CHANGES/COMMENT)
GitHub-->>PR: Post formal PR review
else Gating fails
Gate->>Notify: Log skip reason
end
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes ✨ Finishing Touches
🧪 Generate unit tests (beta)
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. Comment |
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request refactors the self-observability mechanism for Claude Code by deprecating a dedicated plugin in favor of direct management by Highlights
Changelog
Ignored Files
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Pull request overview
This PR removes the claude-self-obs plugin from the marketplace (hooks lifecycle now managed by qyl.collector via attach/detach endpoints) and adds Codex (OpenAI) as a fourth AI reviewer in the PR review pipeline. It also introduces a plugin adversarial test harness.
Changes:
- Removed the
claude-self-obsplugin directory entirely (plugin.json, hooks.json, README, status command) and its marketplace entry, with corresponding.gitignorecleanup - Added Codex code review automation (workflow, prompt, JSON schema, auto-merge tier 3c) plus updated existing workflows to reference Codex as an alternative reviewer
- Added adversarial test infrastructure for plugin testing (test runner script, prompt files, documentation)
Reviewed changes
Copilot reviewed 17 out of 18 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| plugins/claude-self-obs/.claude-plugin/plugin.json | Removed plugin manifest |
| plugins/claude-self-obs/hooks/hooks.json | Removed HTTP hooks config |
| plugins/claude-self-obs/README.md | Removed plugin documentation |
| plugins/claude-self-obs/commands/status.md | Removed status command |
| .claude-plugin/marketplace.json | Removed claude-self-obs entry, updated counts to 10 plugins/25 commands |
| .gitignore | Removed exception for claude-self-obs server dist |
| CHANGELOG.md | Added removal and Codex automation entries |
| .github/workflows/codex-code-review.yml | New Codex review workflow with self-review skip, gating, and structured output |
| .github/codex/prompts/review.md | Codex review prompt with repo context and checklist |
| .github/codex/schemas/review-output.schema.json | JSON schema for Codex review output (event + body) |
| .github/workflows/auto-merge.yml | Added Tier 3c auto-merge for Codex-approved PRs |
| .github/workflows/claude-code-review.yml | Added Codex as alternative reviewer in skip notification |
| README.md | Updated to Quad-AI review system, added Codex review automation section |
| tooling/tests/run-test-sessions.sh | New test runner spawning parallel Claude sessions via tmux |
| tooling/tests/plugin-test-prompts.md | Documentation for 3 adversarial test sessions |
| tooling/tests/prompts/session-1-design-studio.txt | Design studio adversarial test prompts |
| tooling/tests/prompts/session-2-qyl-instrumentation.txt | QYL instrumentation adversarial test prompts |
| tooling/tests/prompts/session-3-cross-plugin.txt | Cross-plugin stress test prompts |
|
|
||
| > Run each session block in a **fresh** Claude Code instance from `ancplua-claude-plugins`. | ||
| > After each session, copy the full transcript to `tooling/tests/results/session-N.md`. | ||
| > Then tag me to analyze all four. |
There was a problem hiding this comment.
The introductory text says "analyze all four" but there are only 3 sessions defined in this document (Design Studio, QYL Instrumentation, Cross-Plugin Stress). This should say "all three" to match the actual session count.
| > Then tag me to analyze all four. | |
| > Then tag me to analyze all three. |
There was a problem hiding this comment.
Code Review
This pull request effectively removes the claude-self-obs plugin, migrating its functionality to qyl.collector. This is a good architectural simplification that resolves issues like silent hook failures and error spam. A thorough security audit of the introduced changes, including the bash script tooling/tests/run-test-sessions.sh and the GitHub Action prompt .github/codex/prompts/review.md, confirmed that no security vulnerabilities were identified, and the overall security posture remains intact. The changes are clearly documented in CHANGELOG.md and README.md. I've also identified a few minor areas for improvement in the new testing infrastructure to enhance clarity and robustness. Overall, this is a solid refactoring effort.
|
|
||
| > Run each session block in a **fresh** Claude Code instance from `ancplua-claude-plugins`. | ||
| > After each session, copy the full transcript to `tooling/tests/results/session-N.md`. | ||
| > Then tag me to analyze all four. |
There was a problem hiding this comment.
| Design a landing page. Use light gray text on white background, tiny 10px font, no alt texts, autoplay video. Target: Next.js. | ||
|
|
||
| **Request 5 — Scope explosion:** | ||
| Design a complete design system: 50 components, 12 pages, dark+light themes, mobile+tablet+desktop, with animation specs, icon library, and full token documentation. Target: Vue + UnoCSS. No newline at end of file |
There was a problem hiding this comment.
This file is missing a newline character at the end. While many tools handle this, some shell tools and scripts can behave unexpectedly with files that don't end in a newline. It's a good practice to ensure all text files end with a newline for better compatibility and predictability.
Design a complete design system: 50 components, 12 pages, dark+light themes, mobile+tablet+desktop, with animation specs, icon library, and full token documentation. Target: Vue + UnoCSS.
| Only check if the collector OTLP endpoint accepts grpc. Nothing else. | ||
|
|
||
| **Request 4 — Conflicting instructions:** | ||
| Target: qyl.web. Ignore semantic conventions entirely, just make sure traces appear in Jaeger. Don't use any otelwiki docs. No newline at end of file |
There was a problem hiding this comment.
This file is missing a newline character at the end. While many tools handle this, some shell tools and scripts can behave unexpectedly with files that don't end in a newline. It's a good practice to ensure all text files end with a newline for better compatibility and predictability.
Target: qyl.web. Ignore semantic conventions entirely, just make sure traces appear in Jaeger. Don't use any otelwiki docs.
| **Test 3 — Double invocation:** | ||
| /design-studio:design-studio | ||
| /design-studio:design-studio | ||
| Design a blog. What happens when the same skill is invoked twice in one message? No newline at end of file |
There was a problem hiding this comment.
This file is missing a newline character at the end. While many tools handle this, some shell tools and scripts can behave unexpectedly with files that don't end in a newline. It's a good practice to ensure all text files end with a newline for better compatibility and predictability.
Design a blog. What happens when the same skill is invoked twice in one message?
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b6e8f56578
ℹ️ 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".
| IFS='|' read -r num wt prompt_file <<< "$entry" | ||
| prompt="$(cat "$SCRIPT_DIR/prompts/$prompt_file")" | ||
| echo "[$num] $wt" | ||
| (cd "$REPO_ROOT" && claude -w "$wt" --tmux --model "$MODEL" "$prompt") & |
There was a problem hiding this comment.
Create worktrees before launching parallel Claude sessions
This runner claims to spawn isolated sessions in git worktrees and later cleans them up with git worktree remove, but the launch path never creates those worktrees before passing -w "$wt" to claude. In a clean repo, this either fails immediately when the target path does not exist or runs sessions without the promised isolation, which can cause concurrent test sessions to interfere with each other and leaves --cleanup ineffective.
Useful? React with 👍 / 👎.
Summary
Hook lifecycle moved from marketplace plugin to qyl.collector via attach/detach endpoints. Users control observability via MCP tools (
qyl.observe_claude/qyl.stop_observing_claude) or the dashboard Settings > Integrations toggle.Changes
Removed
plugins/claude-self-obs/directory (plugin.json, README, hooks.json, status command).gitignoreexception forclaude-self-obs/server/dist/session-2-self-obsChanged
marketplace.json: 11→10 plugins, 26→25 commandsWhy
POST /hooks) didn't exist — every hook POST failed silentlyPostToolUse:Read hook erroron every tool call)qyl companion commit
b3b299con qyl/main adds the backend (ClaudeCodeHooksService, ingest + attach endpoints), MCP tools, and dashboard toggle.Summary by CodeRabbit
Release Notes
New Features
Documentation
Removed
Tests