Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion .agents/plugins/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"owner": {
"name": "compforge"
},
"description": "Cross-CLI developer-workflow marketplace for devloop and code-taste; example remains a layout placeholder.",
"description": "Cross-CLI developer-workflow marketplace for devloop, code-taste, and quality; example remains a layout placeholder.",
"plugins": [
{
"name": "devloop",
Expand Down Expand Up @@ -41,6 +41,24 @@
"category": "Developer Workflow",
"keywords": ["architecture", "code-review", "design", "maintainability", "naming", "refactoring"]
},
{
"name": "quality",
"source": {
"source": "local",
"path": "./quality"
},
"description": "Evidence-driven quality skills that discover and run project-owned verification capabilities.",
"author": {
"name": "compforge",
"url": "https://github.com/compforge"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Developer Workflow",
"keywords": ["quality", "e2e", "testing", "verification", "evidence"]
},
{
"name": "example",
"source": {
Expand Down
11 changes: 10 additions & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"owner": {
"name": "compforge"
},
"description": "Cross-CLI developer-workflow marketplace for devloop and code-taste; example remains a layout placeholder.",
"description": "Cross-CLI developer-workflow marketplace for devloop, code-taste, and quality; example remains a layout placeholder.",
"plugins": [
{
"name": "devloop",
Expand All @@ -23,6 +23,15 @@
"url": "https://github.com/compforge"
}
},
{
"name": "quality",
"source": "./quality",
"description": "Evidence-driven quality skills that discover and run project-owned verification capabilities.",
"author": {
"name": "compforge",
"url": "https://github.com/compforge"
}
},
{
"name": "example",
"source": "./example",
Expand Down
10 changes: 9 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# devloop

跨 CLI 的 plugin marketplace。一个 marketplace 仓库 + 多个 plugin 子目录 + 各 CLI 各自的 manifest。本仓库**不是单 plugin 仓库**——根目录的 `devloop/` / `code-taste/` / `example/` 等子目录每个都是独立 plugin。`devloop` 承载开发闭环,`code-taste` 提供设计判断 skill,`example` 是占位示例。
devloop 是跨 CLI 的 plugin marketplace,根目录下每个 plugin 独立交付和演进。`devloop/devloop`
是首个 Plugin,承载开发闭环;`code-taste` 提供设计判断 skill,`quality` 提供基于执行证据的质量
评估 skill,`example` 是占位示例。

---

Expand Down Expand Up @@ -51,6 +53,12 @@ devloop/ # ← 仓库根(marketplace)
│ ├── skills/code-taste/ # 共享 skill 与分层 references
│ └── README.md
│
├── quality/ # plugin: 基于项目真实测试资产的质量评估(skill-only)
│ ├── .claude-plugin/plugin.json # Claude manifest
│ ├── .codex-plugin/plugin.json # Codex manifest
│ ├── skills/e2e/ # 发现、执行并解释项目已有 E2E 能力
│ └── README.md
│
├── example/ # plugin: 占位演示,证明这是多 plugin marketplace
│ ├── .claude-plugin/plugin.json # Claude ✅
│ ├── .codex-plugin/plugin.json # Codex ✅
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
This repository is a cross-CLI plugin marketplace. Its flagship plugin, `devloop`, helps Claude Code and Codex complete branch-based development without losing control of repository state, validation, Git mutations, or concurrent sessions.

The marketplace also distributes `code-taste`, a skill-only plugin for architecture, boundaries,
naming, maintainability, documentation, and code review.
naming, maintainability, documentation, and code review, plus `quality`, a skill-only plugin for
evidence-driven project quality evaluation.

```text
enter repo → start branch → develop → normalize → lint ∥ test → commit → push → PR/MR → human merge
Expand Down Expand Up @@ -119,6 +120,7 @@ Start a new session after updating so the runtime reloads hooks and skills. User
|---|---|---|
| `devloop` | Controlled PR/MR development lifecycle for Claude Code and Codex | [README](./devloop/README.md) |
| `code-taste` | Engineering judgment for architecture, boundaries, naming, maintainability, and review | [README](./code-taste/README.md) |
| `quality` | Discover and run project-owned quality capabilities; initially E2E | [README](./quality/README.md) |
| `example` | Placeholder demonstrating the multi-plugin marketplace layout | [README](./example/README.md) |

## Documentation
Expand Down
3 changes: 2 additions & 1 deletion README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

# devloop

**为 AI 编码管理一条受控的 PR/MR 开发生命周期。** 本仓库是跨 CLI 的 plugin marketplace;主力 plugin `devloop` 引导 Claude Code 和 Codex 完成进入 repo、基于 branch 开发、按受影响 Component 验证、commit/push 与创建 PR/MR,最终 merge 始终留给人。**GitHub(PR)与 GitLab(MR)都支持**,按 repo 的 origin 自动识别;`code-taste` 作为独立 skill-only plugin 提供架构、边界、命名与可维护性判断,`example` 保留为占位示例。
**为 AI 编码管理一条受控的 PR/MR 开发生命周期。** 本仓库是跨 CLI 的 plugin marketplace;主力 plugin `devloop` 引导 Claude Code 和 Codex 完成进入 repo、基于 branch 开发、按受影响 Component 验证、commit/push 与创建 PR/MR,最终 merge 始终留给人。**GitHub(PR)与 GitLab(MR)都支持**,按 repo 的 origin 自动识别;`code-taste` 作为独立 skill-only plugin 提供架构、边界、命名与可维护性判断,`quality` 提供基于执行证据的项目质量评估 skill,`example` 保留为占位示例。

> 当前支持 Claude Code 和 Codex。设计理念 / 架构见 [AGENTS.md](./AGENTS.md),各 plugin 细节见各自目录的 README。

Expand Down Expand Up @@ -133,6 +133,7 @@ opencode 仍是占位,等其 plugin / hook 协议接入后再启用。
|--------|------|--------|
| `devloop` | 面向 AI 编码的受控 PR/MR 生命周期:repo/branch 入口、受影响 Component 验证、commit/push/PR、实时状态与执行级护栏(Claude + Codex;GitHub + GitLab) | [devloop/README.md](./devloop/README.md) |
| `code-taste` | 架构、边界、命名、可维护性、文档与 Code Review 判断 | [code-taste/README.md](./code-taste/README.md) |
| `quality` | 发现并执行项目已有质量能力,首个 skill 为 E2E | [quality/README.md](./quality/README.md) |
| `example` | 占位 plugin,演示多 plugin marketplace 结构 | [example/README.md](./example/README.md) |

## 新增 plugin
Expand Down
9 changes: 9 additions & 0 deletions quality/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"name": "quality",
"version": "0.0.1",
"description": "Evidence-driven quality skills that discover and run project-owned verification capabilities.",
"author": {
"name": "compforge",
"url": "https://github.com/compforge"
}
}
30 changes: 30 additions & 0 deletions quality/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"name": "quality",
"version": "0.0.1",
"description": "Evidence-driven quality skills that discover and run project-owned verification capabilities.",
"author": {
"name": "compforge",
"url": "https://github.com/compforge"
},
"license": "MIT",
"keywords": [
"quality",
"e2e",
"testing",
"verification",
"evidence"
],
"skills": "./skills/",
"interface": {
"displayName": "Quality",
"shortDescription": "Evidence-driven project quality evaluation",
"longDescription": "Helps coding agents discover, run, and interpret project-owned quality capabilities without inventing missing tests or treating unsupported areas as passed.",
"defaultPrompt": "Use the E2E skill to discover, run, and report this project's existing end-to-end tests.",
"developerName": "compforge",
"category": "Developer Workflow",
"capabilities": [
"Read",
"Interactive"
]
}
}
49 changes: 49 additions & 0 deletions quality/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Quality

Quality is a skill-only plugin that helps coding agents evaluate project-owned quality capabilities.
It does not ship test suites or replace the frameworks and business assets that make a test
executable.

The first bundled skill is `e2e`. It connects three layers without merging their ownership:

1. a framework such as case-harness may provide reusable execution and verdict primitives;
2. each business project owns its real E2E code, cases, adapters, and acceptance criteria;
3. instructions beside that E2E code preserve project-specific setup, failure, cleanup, and evidence
knowledge.

The skill reads the project first, discovers its existing E2E entrypoint, executes it when the
required target is available, and reports evidence. If no runnable suite exists, it returns
`no_capability` rather than inventing tests or presenting source review as validation.

## Install

Add the devloop marketplace once, then install the plugin.

Claude Code:

```text
/plugin marketplace add https://github.com/compforge/devloop.git
/plugin install quality@devloop
```

Codex:

```bash
codex plugin marketplace add https://github.com/compforge/devloop.git
codex plugin add quality@devloop
```

Start a new session after installation so the agent can discover the bundled skill.

## Use

Ask for the outcome instead of naming a framework command:

```text
Run this project's E2E tests and report the result.
Check whether the test environment passes E2E.
Find and execute the existing E2E capability; tell me if the project has none.
```

The skill only triggers and evaluates existing project-owned E2E tests. It does not create tests,
change assertions, fix failures, deploy environments, or turn unavailable coverage into a pass.
102 changes: 102 additions & 0 deletions quality/skills/e2e/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
---
name: e2e
description: Discover, run, and interpret an existing project's end-to-end tests. Use when the user asks to run, check, inspect, or report E2E tests; validate a project or deployed environment end to end; or determine whether a project has an executable E2E capability. Follow project-owned E2E code and operating knowledge, use case-harness primitives only when the project already integrates them, and never invent missing tests.
---

# E2E Quality

Evaluate the project's existing E2E capability. Trigger and interpret tests; do not author tests,
fix failures, or substitute source review for execution evidence.

## Keep the three owners separate

1. Treat case-harness or another framework as infrastructure that may provide runners, lifecycle,
assertions, evidence, and verdict primitives.
2. Treat the business project's E2E code, cases, fixtures, adapters, and acceptance criteria as the
executable verification asset.
3. Treat instructions and runbooks beside that E2E code as the source of project-specific operating
knowledge, including environment setup, known failure modes, retries, cleanup, and evidence paths.

Do not assume that installing or importing case-harness means the project has a runnable E2E suite.
Do not bypass a project wrapper to invoke a lower-level framework directly.

## Understand the project

1. Resolve the repository or project root from the user's target.
2. Follow the project's AGENTS.md discovery rules, then read its README.
3. Establish what the project does, which user or API boundary its E2E suite exercises, and which
revision and environment the requested run should evaluate.

Do not require a diff or a dedicated quality declaration. Use the repository's current facts.

## Discover the E2E capability

Search the repository before running anything:

- Locate likely E2E, acceptance, integration, system-test, or product-test directories.
- Inspect nearby AGENTS.md, README, runbooks, Makefiles, package scripts, configuration, fixtures,
and recent result artifacts.
- Search for documented E2E commands and framework entrypoints, including project-local wrappers
around case-harness, Playwright, Cypress, pytest, or other runners.
- Prefer the business-facing suite and its canonical command when multiple lower-level runners
exist.

For the selected E2E directory, read its local documentation and configuration before execution.
Project-local knowledge takes precedence over generic framework habits.

Classify discovery as one of:

- `ready`: an executable suite, target, and required inputs are available;
- `blocked`: the suite exists but a required environment, credential, dependency, service, device,
or target is unavailable;
- `no_capability`: no executable project-owned E2E suite can be found.

Framework code without business tests is `no_capability`, not `ready`. If more than one plausible
suite remains and repository evidence cannot select one, report the ambiguity instead of guessing.

## Execute the project-owned entrypoint

1. Use the command documented by the project or exposed through its canonical Make/package/CLI
entrypoint.
2. Preserve the requested revision and environment. Do not deploy, install new dependencies, create
credentials, or switch to a different target unless the user explicitly authorizes it.
3. Respect project-declared timeouts, concurrency, cleanup, and retry policy. Do not retry a failure
merely to obtain a green run; only apply retries already defined by the suite or its runbook.
4. Capture the exact command, exit status, native verdict, logs, screenshots, traces, reports, and
other evidence paths produced by the suite.

Do not edit source, cases, assertions, configuration, or expected results during the assessment.
When execution would have material impact on a shared or production environment, stop for the
required authorization before running it.

## Interpret the evidence

Use the suite's native result semantics. When case-harness artifacts exist, consume their Run,
Verdict, checks, and evidence without flattening `skipped` or `error` into pass.

Distinguish these outcomes:

- `passed`: the selected suite completed and its declared checks passed;
- `failed`: the suite completed and a business assertion or acceptance condition failed;
- `error`: the runner, setup, cleanup, environment, or evidence collection failed;
- `blocked`: execution could not start or complete because a prerequisite was unavailable;
- `no_capability`: no runnable project-owned E2E suite was discovered.

Inspect available failure artifacts to explain what failed, but do not diagnose beyond the evidence
or turn a plausible cause into a confirmed root cause.

## Report and preserve learnings

Report:

- the project, revision, environment, and E2E boundary evaluated;
- the E2E directory and canonical entrypoint discovered;
- the exact capability and command executed;
- the outcome and the evidence supporting it;
- failed checks, execution errors, blocked prerequisites, and untested or unknown areas;
- reusable project-specific operating knowledge observed during the run.

Do not silently modify the project's E2E documentation while assessing it. When a repeatable setup
issue, workaround, cleanup rule, or evidence location should be retained, propose a concise update
beside the project's E2E code and apply it only when the user asks. Promote a lesson into this skill
only after it proves reusable across projects.
4 changes: 4 additions & 0 deletions quality/skills/e2e/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "E2E Quality"
short_description: "Run and interpret project-owned E2E tests"
default_prompt: "Use $e2e to discover, run, and report the existing project E2E tests."