mirror of
https://github.com/affaan-m/ECC.git
synced 2026-09-20 16:47:59 +02:00
Merge pull request #3133 from affaan-m/release/ecc-universal-2.2.2
release: ecc-universal 2.2.2
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
"plugins": [
|
||||
{
|
||||
"name": "ecc",
|
||||
"version": "2.2.1",
|
||||
"version": "2.2.2",
|
||||
"source": {
|
||||
"source": "local",
|
||||
"path": "./"
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"name": "ecc",
|
||||
"source": "./",
|
||||
"description": "Harness-native ECC operator layer - 68 agents, 292 skills, 94 legacy command shims, reusable hooks, rules, selective install profiles, and production-ready workflows for Claude Code, Codex, OpenCode, Cursor, and related agent harnesses",
|
||||
"version": "2.2.1",
|
||||
"version": "2.2.2",
|
||||
"author": {
|
||||
"name": "Affaan Mustafa",
|
||||
"email": "me@affaanmustafa.com"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ecc",
|
||||
"version": "2.2.1",
|
||||
"version": "2.2.2",
|
||||
"description": "Harness-native ECC plugin for engineering teams - 68 agents, 292 skills, 94 legacy command shims, reusable hooks, rules, MCP conventions, and operator workflows for Claude Code plus adjacent agent harnesses",
|
||||
"author": {
|
||||
"name": "Affaan Mustafa",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ecc",
|
||||
"version": "2.2.1",
|
||||
"version": "2.2.2",
|
||||
"description": "Harness-native ECC workflows for Codex: shared skills, production-ready MCP configs, and selective-install-aligned conventions for TDD, security scanning, code review, and autonomous development.",
|
||||
"author": {
|
||||
"name": "Affaan Mustafa",
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "ecc-universal",
|
||||
"version": "2.2.1",
|
||||
"version": "2.2.2",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "ecc-universal",
|
||||
"version": "2.2.1",
|
||||
"version": "2.2.2",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@opencode-ai/plugin": "^1.4.3",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ecc-universal",
|
||||
"version": "2.2.1",
|
||||
"version": "2.2.2",
|
||||
"description": "ECC plugin for OpenCode - agents, commands, hooks, and skills",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
|
||||
@@ -537,7 +537,7 @@ export const ECCHooksPlugin: ECCHooksPluginFn = async ({
|
||||
const contextBlock = [
|
||||
"# ECC Context (preserve across compaction)",
|
||||
"",
|
||||
"## Active Plugin: ECC v2.2.1",
|
||||
"## Active Plugin: ECC v2.2.2",
|
||||
"- Hooks: file.edited, tool.execute.before/after, session.created/idle/deleted, shell.env, compacting, permission.ask",
|
||||
"- Tools: run-tests, check-coverage, security-audit, format-code, lint-check, git-summary, changed-files",
|
||||
"- Agents: 13 specialized (planner, architect, tdd-guide, code-reviewer, security-reviewer, build-error-resolver, e2e-runner, refactor-cleaner, doc-updater, go-reviewer, go-build-resolver, database-reviewer, python-reviewer)",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
This is a **production-ready AI coding plugin** providing 68 specialized agents, 292 skills, 94 commands, and automated hook workflows for software development.
|
||||
|
||||
**Version:** 2.2.1
|
||||
**Version:** 2.2.2
|
||||
|
||||
## Core Principles
|
||||
|
||||
|
||||
+30
-2
@@ -1,10 +1,38 @@
|
||||
# Changelog
|
||||
|
||||
## Unreleased
|
||||
## 2.2.2 - 2026-09-15
|
||||
|
||||
### Fixed
|
||||
|
||||
- Claude settings updates now tolerate a missing Windows device ID while retaining full-precision inode checks and strict matching when both device IDs are available.
|
||||
#### Packaging
|
||||
|
||||
- Explicitly include the compiled OpenCode payload in the npm package and verify that packing builds it from a clean state with lifecycle scripts enabled.
|
||||
|
||||
#### Memory and MCP
|
||||
|
||||
- Distinguish incomplete memory reads from missing records and classify directory traversal failures (`90ef62cb`, `8321021c`).
|
||||
- Accept the reserved `_meta` parameter on memory MCP ping requests (`380f4b35`).
|
||||
|
||||
#### Hooks and Windows compatibility
|
||||
|
||||
- Keep `hooks.json` within Claude Code's schema by moving stable hook metadata into a validated sidecar (`1ac07903`).
|
||||
- Handle stuck optional values and long-option prefixes in the no-verify guard (`4f373874`).
|
||||
- Support Windows linter paths and ESLint 9 (`2083c983`).
|
||||
- Tolerate missing Windows device IDs in settings updates while retaining full-precision inode checks and strict matching when both device IDs are available (`d3af582b`).
|
||||
|
||||
#### Workflow guidance and catalog
|
||||
|
||||
- Filter epic sync issues by label (`3033436d`).
|
||||
- Remove instructions to auto-merge dependency bumps and synchronize localized merge authority (`22d7ed51`, `678c6dea`).
|
||||
- Keep common naming and Boolean guidance language-neutral (`072e4684`, `a0ecb793`, `013ed0a8`).
|
||||
- Distinguish the `prp-pr` command alias (`cc91c24f`).
|
||||
- Correct Rails skill discovery, invoice tax calculation order, and framework documentation (`b6ddd13a`).
|
||||
- Remove Serply and Squish catalog entries (`c4904e3f`).
|
||||
|
||||
#### Dependency security
|
||||
|
||||
- Update `lru` to 0.18.2 for RUSTSEC-2026-0253 (`4fc950c4`).
|
||||
- Update `js-yaml` to 4.3.2 for GHSA-2883-xcg3-v3hh (`549c1469`).
|
||||
|
||||
## 2.2.0 - 2026-08-25
|
||||
|
||||
|
||||
@@ -170,7 +170,7 @@ Access to 68 agents, 292 skills, and 94 legacy command shims, plus hooks, rules,
|
||||
For Claude Code plugin setup, updates, scope changes, and hook-profile changes:
|
||||
|
||||
```bash
|
||||
npx ecc-universal@2.2.1 setup
|
||||
npx ecc-universal@2.2.2 setup
|
||||
```
|
||||
|
||||
If npm reports a version or cache error, confirm the registry version before retrying:
|
||||
@@ -183,12 +183,12 @@ ECC 2.2 supports the same guided setup through modern package runners:
|
||||
|
||||
| Package runner | Guided setup command |
|
||||
|---|---|
|
||||
| npm / npx | `npx ecc-universal@2.2.1 setup` |
|
||||
| pnpm | `pnpm dlx ecc-universal@2.2.1 setup` |
|
||||
| Yarn 2+ | `yarn dlx ecc-universal@2.2.1 setup` |
|
||||
| Bun | `bunx ecc-universal@2.2.1 setup` |
|
||||
| npm / npx | `npx ecc-universal@2.2.2 setup` |
|
||||
| pnpm | `pnpm dlx ecc-universal@2.2.2 setup` |
|
||||
| Yarn 2+ | `yarn dlx ecc-universal@2.2.2 setup` |
|
||||
| Bun | `bunx ecc-universal@2.2.2 setup` |
|
||||
|
||||
The examples select [the published ECC 2.2.1 release](https://www.npmjs.com/package/ecc-universal/v/2.2.1), matching this repository's release version. A version pin is not a security audit or an integrity check. Review the release source and registry integrity before running package code; use a reviewed checkout for unreleased changes.
|
||||
The examples select [the published ECC 2.2.2 release](https://www.npmjs.com/package/ecc-universal/v/2.2.2), matching this repository's release version. A version pin is not a security audit or an integrity check. Review the release source and registry integrity before running package code; use a reviewed checkout for unreleased changes.
|
||||
|
||||
Yarn Classic 1 does not provide `yarn dlx`; use `npx`, install the package globally, or upgrade Yarn for a temporary one-shot run.
|
||||
|
||||
@@ -197,7 +197,7 @@ The wizard inventories the official marketplace and every native Claude install
|
||||
To configure more than one coding agent in one reviewed flow, use the multi-harness wizard:
|
||||
|
||||
```bash
|
||||
npx ecc-universal@2.2.1 install --guided
|
||||
npx ecc-universal@2.2.2 install --guided
|
||||
```
|
||||
|
||||
It lets you select any combination of Claude Code, Codex, and Kimi Code, shows each install channel and destination, preflights every selection before the first write, and asks for one final confirmation.
|
||||
@@ -211,7 +211,7 @@ It lets you select any combination of Claude Code, Codex, and Kimi Code, shows e
|
||||
For automation, make every provider-specific choice explicit:
|
||||
|
||||
```bash
|
||||
npx ecc-universal@2.2.1 install --guided \
|
||||
npx ecc-universal@2.2.2 install --guided \
|
||||
--harness claude --harness codex --harness kimi \
|
||||
--claude-scope local --claude-hooks standard \
|
||||
--profile core --yes
|
||||
@@ -220,16 +220,16 @@ npx ecc-universal@2.2.1 install --guided \
|
||||
Verify the native guided Codex path and managed Kimi path without writing first:
|
||||
|
||||
```bash
|
||||
npx ecc-universal@2.2.1 install --guided --harness codex --dry-run
|
||||
npx ecc-universal@2.2.1 install --profile core --target kimi --dry-run
|
||||
npx ecc-universal@2.2.2 install --guided --harness codex --dry-run
|
||||
npx ecc-universal@2.2.2 install --profile core --target kimi --dry-run
|
||||
```
|
||||
|
||||
Additional package-name commands are also available through the 2.2 alias:
|
||||
|
||||
```bash
|
||||
npx ecc-universal@2.2.1 consult "security reviews" --target claude
|
||||
npx ecc-universal@2.2.1 install --profile minimal --target claude --with capability:machine-learning
|
||||
npx ecc-universal@2.2.1 doctor --target kimi
|
||||
npx ecc-universal@2.2.2 consult "security reviews" --target claude
|
||||
npx ecc-universal@2.2.2 install --profile minimal --target claude --with capability:machine-learning
|
||||
npx ecc-universal@2.2.2 doctor --target kimi
|
||||
```
|
||||
|
||||
Do not use `npx ecc-install --profile minimal --target claude`: `ecc-install` is a binary name inside `ecc-universal`, not a separately published npm package.
|
||||
@@ -401,7 +401,7 @@ Deep per-harness notes (feature parity, hook adapters, limitations) live in [Pla
|
||||
Use this when you want ECC's rules, agents, commands, platform config, and core workflows without runtime hooks:
|
||||
|
||||
```bash
|
||||
npx ecc-universal@2.2.1 install --profile minimal --target claude
|
||||
npx ecc-universal@2.2.2 install --profile minimal --target claude
|
||||
```
|
||||
|
||||
From a source checkout, the equivalent command is:
|
||||
@@ -586,11 +586,11 @@ If you installed from the universal package, run these commands from the same
|
||||
project directory used for installation:
|
||||
|
||||
```bash
|
||||
npx ecc-universal@2.2.1 list-installed
|
||||
npx ecc-universal@2.2.1 doctor
|
||||
npx ecc-universal@2.2.1 repair
|
||||
npx ecc-universal@2.2.1 uninstall --dry-run
|
||||
npx ecc-universal@2.2.1 uninstall
|
||||
npx ecc-universal@2.2.2 list-installed
|
||||
npx ecc-universal@2.2.2 doctor
|
||||
npx ecc-universal@2.2.2 repair
|
||||
npx ecc-universal@2.2.2 uninstall --dry-run
|
||||
npx ecc-universal@2.2.2 uninstall
|
||||
```
|
||||
|
||||
From a source checkout, inspect the managed state before reinstalling:
|
||||
@@ -779,7 +779,7 @@ The `ito-compute-cli` package is currently unpublished. Build it locally from th
|
||||
|
||||
## What's New
|
||||
|
||||
Current release: **2.2.1** (2026-08-31). Highlights of the 2.2 line:
|
||||
Current release: **2.2.2** (2026-08-31). Highlights of the 2.2 line:
|
||||
|
||||
- Guided, manifest-driven setup across Claude Code, Codex, and Kimi Code, with install-state ownership, doctor, repair, and uninstall.
|
||||
- Native Antigravity install, a thin Pi adapter, and the packed-artifact release gate tested on Linux, macOS, and Windows.
|
||||
@@ -1196,7 +1196,7 @@ ECC's Memory Vault gives Claude, Codex, Hermes, OpenClaw, Kimi, and other harnes
|
||||
Skill-only, minimal, manual, and Claude plugin installs do not put the Memory Vault runtime on `PATH`. Install the npm runtime separately before using the CLI or optional MCP server:
|
||||
|
||||
```bash
|
||||
npm install -g ecc-universal@2.2.1
|
||||
npm install -g ecc-universal@2.2.2
|
||||
ecc memory init --scope project
|
||||
ecc memory search "authentication migration" --target-harness codex
|
||||
ecc memory doctor
|
||||
@@ -1591,7 +1591,7 @@ opencode
|
||||
|
||||
**Option 2: Install as npm package**
|
||||
```bash
|
||||
npm install ecc-universal@2.2.1
|
||||
npm install ecc-universal@2.2.2
|
||||
```
|
||||
|
||||
Then add to your `opencode.json`:
|
||||
|
||||
+1
-1
@@ -80,7 +80,7 @@
|
||||
|
||||
## 最新动态
|
||||
|
||||
### v2.2.1 — 引导式多 Harness 安装(2026年8月)
|
||||
### v2.2.2 — 引导式多 Harness 安装(2026年8月)
|
||||
|
||||
新增可审查的 Claude Code、Codex 与 Kimi Code 多 Harness 安装流程,并提供同步的 npm 命令入口。
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
spec_version: "0.1.0"
|
||||
name: ecc
|
||||
version: 2.2.1
|
||||
version: 2.2.2
|
||||
description: "Initial gitagent export surface for ECC's shared skill catalog, governance, and identity. Native agents, commands, and hooks remain authoritative in the repository while manifest coverage expands."
|
||||
author: affaan-m
|
||||
license: MIT
|
||||
|
||||
@@ -703,7 +703,7 @@ Suggested payload:
|
||||
"skippedModules": []
|
||||
},
|
||||
"source": {
|
||||
"repoVersion": "2.2.1",
|
||||
"repoVersion": "2.2.2",
|
||||
"repoCommit": "git-sha",
|
||||
"manifestVersion": 1
|
||||
},
|
||||
|
||||
@@ -79,7 +79,7 @@ Este repositório contém apenas o código. Os guias explicam tudo.
|
||||
|
||||
## O Que Há de Novo
|
||||
|
||||
### v2.2.1 — Instalação Guiada para Múltiplos Harnesses (Ago 2026)
|
||||
### v2.2.2 — Instalação Guiada para Múltiplos Harnesses (Ago 2026)
|
||||
|
||||
Adiciona uma instalação revisável para Claude Code, Codex e Kimi Code, com uma entrada de comando npm sincronizada.
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
|
||||
Bu, yazılım geliştirme için 68 özel agent, 292 skill, 94 command ve otomatik hook iş akışları sağlayan **üretime hazır bir AI kodlama eklentisidir**.
|
||||
|
||||
**Sürüm:** 2.2.1
|
||||
**Sürüm:** 2.2.2
|
||||
|
||||
## Temel İlkeler
|
||||
|
||||
|
||||
+1
-1
@@ -79,7 +79,7 @@ Bu repository yalnızca ham kodu içerir. Rehberler her şeyi açıklıyor.
|
||||
|
||||
## Yenilikler
|
||||
|
||||
### v2.2.1 — Rehberli Çoklu Harness Kurulumu (Ağu 2026)
|
||||
### v2.2.2 — Rehberli Çoklu Harness Kurulumu (Ağu 2026)
|
||||
|
||||
Claude Code, Codex ve Kimi Code için incelenebilir çoklu harness kurulumu ve eşitlenmiş npm komut girişi eklendi.
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
这是一个**生产就绪的 AI 编码插件**,提供 68 个专业代理、292 项技能、94 条命令以及自动化钩子工作流,用于软件开发。
|
||||
|
||||
**版本:** 2.2.1
|
||||
**版本:** 2.2.2
|
||||
|
||||
## 核心原则
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
|
||||
## 最新动态
|
||||
|
||||
### v2.2.1 — 引导式多 Harness 安装(2026年8月)
|
||||
### v2.2.2 — 引导式多 Harness 安装(2026年8月)
|
||||
|
||||
新增可审查的 Claude Code、Codex 与 Kimi Code 多 Harness 安装流程,并提供同步的 npm 命令入口。
|
||||
|
||||
@@ -1292,7 +1292,7 @@ ECC 是**第一个最大化利用每个主要 AI 编码工具的插件**。以
|
||||
| **上下文文件** | CLAUDE.md + AGENTS.md | AGENTS.md | AGENTS.md | AGENTS.md |
|
||||
| **秘密检测** | 基于钩子 | beforeSubmitPrompt 钩子 | 基于沙箱 | 基于钩子 |
|
||||
| **自动格式化** | PostToolUse 钩子 | afterFileEdit 钩子 | N/A | file.edited 钩子 |
|
||||
| **版本** | 插件 | 插件 | 参考配置 | 2.2.1 |
|
||||
| **版本** | 插件 | 插件 | 参考配置 | 2.2.2 |
|
||||
|
||||
**关键架构决策:**
|
||||
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "ecc-universal",
|
||||
"version": "2.2.1",
|
||||
"version": "2.2.2",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "ecc-universal",
|
||||
"version": "2.2.1",
|
||||
"version": "2.2.2",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@iarna/toml": "2.2.5",
|
||||
|
||||
+2
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ecc-universal",
|
||||
"version": "2.2.1",
|
||||
"version": "2.2.2",
|
||||
"description": "Harness-native agent operating system for Codex, OpenCode, Cursor, Gemini, Claude Code, and terminal workflows - skills, hooks, rules, MCP conventions, and operator control-plane patterns",
|
||||
"main": ".opencode/dist/index.js",
|
||||
"types": ".opencode/dist/index.d.ts",
|
||||
@@ -62,6 +62,7 @@
|
||||
".hermes/",
|
||||
".kimi/",
|
||||
".opencode/",
|
||||
".opencode/dist/",
|
||||
".pi/",
|
||||
".openclaw/",
|
||||
".qwen/",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ecc",
|
||||
"version": "2.2.1",
|
||||
"version": "2.2.2",
|
||||
"description": "Harness-native ECC workflows for Codex: shared skills, production-ready MCP configs, and selective-install-aligned conventions for TDD, security scanning, code review, and autonomous development.",
|
||||
"author": {
|
||||
"name": "Affaan Mustafa",
|
||||
|
||||
@@ -184,7 +184,8 @@ function main() {
|
||||
assert.strictEqual(result.status, 0, result.stderr)
|
||||
}],
|
||||
["npm pack includes the compiled OpenCode dist payload", () => {
|
||||
const result = spawnSync("npm", ["pack", "--dry-run", "--json"], {
|
||||
fs.rmSync(path.dirname(distEntry), { recursive: true, force: true })
|
||||
const result = spawnSync("npm", ["pack", "--dry-run", "--json", "--ignore-scripts=false"], {
|
||||
cwd: repoRoot,
|
||||
encoding: "utf8",
|
||||
shell: process.platform === "win32",
|
||||
|
||||
@@ -6,6 +6,8 @@ const assert = require('assert');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const { version } = require('../../package.json');
|
||||
|
||||
const README = path.join(__dirname, '..', '..', 'README.md');
|
||||
const RULES_README = path.join(__dirname, '..', '..', 'rules', 'README.md');
|
||||
const CODEX_AGENTS = path.join(__dirname, '..', '..', '.codex', 'AGENTS.md');
|
||||
@@ -53,10 +55,10 @@ function runTests() {
|
||||
|
||||
if (test('README leads with the idempotent guided plugin setup path', () => {
|
||||
const topClaudeSectionIndex = readme.indexOf('## Install with Claude Code');
|
||||
const topGuidedCommandIndex = readme.indexOf('npx ecc-universal@2.2.1 setup', topClaudeSectionIndex);
|
||||
const topGuidedCommandIndex = readme.indexOf(`npx ecc-universal@${version} setup`, topClaudeSectionIndex);
|
||||
const nativePluginCommandIndex = readme.indexOf('/plugin marketplace add', topClaudeSectionIndex);
|
||||
const installSectionIndex = readme.indexOf('## Install ECC');
|
||||
const guidedCommandIndex = readme.indexOf('npx ecc-universal@2.2.1 setup', installSectionIndex);
|
||||
const guidedCommandIndex = readme.indexOf(`npx ecc-universal@${version} setup`, installSectionIndex);
|
||||
const claudeDetailsIndex = readme.indexOf('### Claude Code details', installSectionIndex);
|
||||
|
||||
assert.ok(
|
||||
@@ -95,9 +97,9 @@ function runTests() {
|
||||
})) passed++; else failed++;
|
||||
|
||||
if (test('README documents modern package-runner alternatives', () => {
|
||||
assert.ok(readme.includes('pnpm dlx ecc-universal@2.2.1 setup'));
|
||||
assert.ok(readme.includes('yarn dlx ecc-universal@2.2.1 setup'));
|
||||
assert.ok(readme.includes('bunx ecc-universal@2.2.1 setup'));
|
||||
assert.ok(readme.includes(`pnpm dlx ecc-universal@${version} setup`));
|
||||
assert.ok(readme.includes(`yarn dlx ecc-universal@${version} setup`));
|
||||
assert.ok(readme.includes(`bunx ecc-universal@${version} setup`));
|
||||
assert.ok(
|
||||
readme.includes('Yarn Classic 1 does not provide `yarn dlx`'),
|
||||
'README should not advertise the modern Yarn command to Yarn Classic users'
|
||||
@@ -122,10 +124,10 @@ function runTests() {
|
||||
'README should document doctor before reinstalling'
|
||||
);
|
||||
for (const command of [
|
||||
'npx ecc-universal@2.2.1 list-installed',
|
||||
'npx ecc-universal@2.2.1 doctor',
|
||||
'npx ecc-universal@2.2.1 repair',
|
||||
'npx ecc-universal@2.2.1 uninstall --dry-run',
|
||||
`npx ecc-universal@${version} list-installed`,
|
||||
`npx ecc-universal@${version} doctor`,
|
||||
`npx ecc-universal@${version} repair`,
|
||||
`npx ecc-universal@${version} uninstall --dry-run`,
|
||||
]) {
|
||||
assert.ok(
|
||||
readme.includes(command),
|
||||
@@ -148,7 +150,7 @@ function runTests() {
|
||||
'README should document the shell minimal profile command'
|
||||
);
|
||||
assert.ok(
|
||||
readme.includes('npx ecc-universal@2.2.1 install --profile minimal --target claude'),
|
||||
readme.includes(`npx ecc-universal@${version} install --profile minimal --target claude`),
|
||||
'README should document the published universal-package minimal profile command'
|
||||
);
|
||||
assert.ok(
|
||||
@@ -175,7 +177,7 @@ function runTests() {
|
||||
'README should surface component discovery before install steps'
|
||||
);
|
||||
assert.ok(
|
||||
readme.includes('npx ecc-universal@2.2.1 consult "security reviews" --target claude'),
|
||||
readme.includes(`npx ecc-universal@${version} consult "security reviews" --target claude`),
|
||||
'README should document the packaged consult command'
|
||||
);
|
||||
assert.ok(
|
||||
@@ -193,15 +195,15 @@ function runTests() {
|
||||
|
||||
if (test('README gives the native guided Codex and managed Kimi dry-run paths', () => {
|
||||
assert.ok(
|
||||
readme.includes('npx ecc-universal@2.2.1 install --guided --harness codex --dry-run'),
|
||||
readme.includes(`npx ecc-universal@${version} install --guided --harness codex --dry-run`),
|
||||
'README should verify Codex through the native guided reconciler'
|
||||
);
|
||||
assert.ok(
|
||||
!readme.includes('npx ecc-universal@2.2.1 install --profile core --target codex --dry-run'),
|
||||
!readme.includes(`npx ecc-universal@${version} install --profile core --target codex --dry-run`),
|
||||
'README should not present the legacy managed Codex adapter as the native lifecycle'
|
||||
);
|
||||
assert.ok(
|
||||
readme.includes('npx ecc-universal@2.2.1 install --profile core --target kimi --dry-run')
|
||||
readme.includes(`npx ecc-universal@${version} install --profile core --target kimi --dry-run`)
|
||||
);
|
||||
for (const target of ['cursor', 'gemini', 'opencode', 'codebuddy', 'joycode', 'qwen', 'zed', 'hermes', 'openclaw']) {
|
||||
assert.ok(readme.includes(`\`${target}\``), `README should name the ${target} target`);
|
||||
@@ -313,7 +315,6 @@ function runTests() {
|
||||
})) passed++; else failed++;
|
||||
|
||||
if (test('README binds package runners to the release and avoids unaudited bootstraps', () => {
|
||||
const version = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'package.json'))).version;
|
||||
const runners = [...readme.matchAll(/(?:npx |pnpm dlx |yarn dlx |bunx )(ecc-universal[^\s`]+)/g)];
|
||||
assert.ok(runners.length >= 15);
|
||||
for (const match of runners) assert.strictEqual(match[1], `ecc-universal@${version}`);
|
||||
@@ -321,7 +322,7 @@ function runTests() {
|
||||
assert.ok(!/npm install -g opencode(?:\s|$)/m.test(readme));
|
||||
assert.match(readme, /version pin is not a security audit/i);
|
||||
assert.match(readme, /already installed.*reviewed.*AgentShield/i);
|
||||
assert.ok(readme.includes('https://www.npmjs.com/package/ecc-universal/v/2.2.1'));
|
||||
assert.ok(readme.includes(`https://www.npmjs.com/package/ecc-universal/v/${version}`));
|
||||
})) passed++; else failed++;
|
||||
|
||||
console.log(`\nResults: Passed: ${passed}, Failed: ${failed}`);
|
||||
|
||||
@@ -122,8 +122,12 @@ function buildExpectedPublishPaths(repoRoot) {
|
||||
[...modules.flatMap((module) => module.paths || []), ...extraPaths, ...exclusionPaths].map(normalizePublishPath)
|
||||
)
|
||||
|
||||
// npm needs an explicit entry to include this gitignored build output.
|
||||
const requiredBuildPaths = [".opencode/dist"]
|
||||
|
||||
return [...combined]
|
||||
.filter((publishPath) => !isCoveredByAncestor(publishPath, combined))
|
||||
.concat(requiredBuildPaths)
|
||||
.sort()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user