Merge upstream/main into feat/gateguard-fewer-round-trips

Brings in the three commits main gained since the branch's merge base: the 2.2.3
release, retiring the Everything Claude Code name for ECC, and the ja-JP sponsor
update. 227 files arrive from main; two conflicted.

CHANGELOG.md: the branch had added an Unreleased section and main a released
2.2.3 section, both at the top. Both are kept verbatim with Unreleased above
2.2.3, since none of the branch's entries shipped in that release.

manifests/context-packs/skill-triggers@1.json: both sides had recomputed
registryDigest from the same earlier value to different results, and neither is
the digest of the merged tree. It is recomputed with loadContextRegistry over the
merged tree and only that field changes; triggers and triggersDigest are
untouched on both sides. validate-context-profiles passes.

All twelve CI validators pass. The full suite reports 44 failures in seven files;
43 of them fail by name and count identically on an unmodified upstream/main, and
the remaining one, plugin-hook-bootstrap, fails only inside run-all and passes in
isolation on both trees. The merge introduces no failing test that main does not
already have.
This commit is contained in:
montjeffrey
2026-10-04 20:47:30 -04:00
228 changed files with 741 additions and 676 deletions
+1
View File
@@ -133,6 +133,7 @@ function determineInstallCwd(record, repoRoot) {
// install-apply.js if its package.json identifies it as ECC — otherwise a
// cloned project that ships a nested `evil/{package.json,scripts/install-apply.js}`
// could drive auto-update into executing attacker code (GHSA-hfpv-w6mp-5g95).
// 'everything-claude-code' is the legacy 1.x package name, kept for existing checkouts.
const ECC_PACKAGE_NAMES = new Set(['ecc-universal', 'everything-claude-code']);
function validateRepoRoot(repoRoot) {
+1 -1
View File
@@ -172,7 +172,7 @@ const descChars = skillDescriptions.reduce((n, d) => n + d.length, 0);
fs.writeFileSync(path.join(tmpDir, 'README.md'), `# ecc-pi-core
A curated, Pi-native profile of ECC (Everything Claude Code): ${skillCount} portable
A curated, Pi-native profile of ECC: ${skillCount} portable
engineering skills and ${commandCount} pure prompt-workflow commands, with no extensions,
no hooks, no runtime downloads, and no network or SaaS dependencies.
+1 -1
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env node
/**
* NanoClaw v2 — Barebones Agent REPL for Everything Claude Code
* NanoClaw v2 — Barebones Agent REPL for ECC
*
* Zero external dependencies. Session-aware REPL around `claude -p`.
*/
+1 -1
View File
@@ -2,7 +2,7 @@
/**
* scripts/codemaps/generate.ts
*
* Codemap Generator for everything-claude-code (ECC)
* Codemap Generator for ECC
*
* Scans the current working directory and generates architectural
* codemap documentation under docs/CODEMAPS/ as specified by the
+3 -1
View File
@@ -81,7 +81,9 @@ require_file "$CONFIG_FILE" "Global config.toml"
require_file "$AGENTS_FILE" "Global AGENTS.md"
if [[ -f "$AGENTS_FILE" ]]; then
if search_file '^# Everything Claude Code \(ECC\)' "$AGENTS_FILE"; then
# Accept the current "# ECC" heading and the legacy expanded-name heading
# that older syncs wrote into existing ~/.codex/AGENTS.md files.
if search_file '^# (ECC|Everything Claude Code \(ECC\))( |$)' "$AGENTS_FILE"; then
ok "AGENTS contains ECC root instructions"
else
fail "AGENTS missing ECC root instructions"
+9 -4
View File
@@ -3,7 +3,7 @@
// Slash commands: /ecc /help /skill /docs /release
//
// Env: DISCORD_BOT_TOKEN (required), DISCORD_APP_ID (required),
// ECC_REPO (path to local clone, default ~/GitHub/ECC/everything-claude-code),
// ECC_REPO (path to local clone, default ~/GitHub/ECC),
// DISCORD_INVITE (optional, shown in /ecc)
//
// Crash-only design: any gateway close, error, or missed heartbeat ack exits
@@ -21,7 +21,12 @@ if (!TOKEN || !APP_ID) {
console.error('missing DISCORD_BOT_TOKEN / DISCORD_APP_ID');
process.exit(1);
}
const REPO = process.env.ECC_REPO || join(homedir(), 'GitHub/ECC/everything-claude-code');
// Prefer ~/GitHub/ECC. The nested legacy checkout path is still accepted so
// existing hosts keep working without setting ECC_REPO.
const REPO = process.env.ECC_REPO || [
join(homedir(), 'GitHub/ECC'),
join(homedir(), 'GitHub/ECC/everything-claude-code'),
].find(dir => existsSync(join(dir, 'package.json'))) || join(homedir(), 'GitHub/ECC');
const REPO_URL = 'https://github.com/affaan-m/ECC';
const INVITE = process.env.DISCORD_INVITE || '';
const API = 'https://discord.com/api/v10';
@@ -133,12 +138,12 @@ const HELP = [
const handlers = {
ecc: () => [
'**Everything Claude Code (ECC)** — the agent harness performance system.',
'**ECC** — the agent harness performance system.',
'Skills, agents, rules, hooks, MCP conventions, and operator workflows that move across Claude Code, Codex, OpenCode, Cursor, Gemini, and Zed.',
'',
`- repo: ${REPO_URL}`,
'- site: https://ecc.tools',
`- install: \`/plugin marketplace add affaan-m/everything-claude-code\` then \`/plugin install ecc\``,
`- install: \`/plugin marketplace add affaan-m/ECC\` then \`/plugin install ecc\``,
INVITE ? `- invite a friend: ${INVITE}` : '',
].filter(Boolean).join('\n'),
+5 -2
View File
@@ -216,7 +216,8 @@ function hasFileWithExtension(rootDir, relativeDir, extensions) {
function detectTargetMode(rootDir) {
const packageJson = safeParseJson(safeRead(rootDir, 'package.json'));
if (packageJson?.name === 'everything-claude-code') {
// 'everything-claude-code' is the legacy package name, kept for older checkouts.
if (['ecc-universal', 'everything-claude-code'].includes(packageJson?.name)) {
return 'repo';
}
@@ -232,6 +233,8 @@ function detectTargetMode(rootDir) {
return 'consumer';
}
// The everything-claude-code entries below are legacy install ids, kept so
// existing 1.x installs are still detected.
const ECC_PLUGIN_KEY_PATTERNS = [
/^ecc@/i,
/^everything-claude-code@/i,
@@ -831,7 +834,7 @@ function getConsumerChecks(rootDir) {
points: 4,
scopes: ['repo'],
path: '~/.claude/plugins/ecc/ (legacy everything-claude-code paths also supported)',
description: 'Everything Claude Code is installed for the active user or project',
description: 'ECC is installed for the active user or project',
pass: Boolean(pluginInstall),
fix: 'Install the ECC plugin for this user or project before auditing project-specific harness quality.',
},
+1 -1
View File
@@ -722,7 +722,7 @@ async function main() {
// compaction resume the model would re-run /fw-task-new (or any
// ARGUMENTS-bearing slash skill) with the last ARGUMENTS it saw,
// duplicating issues/branches/Notion tasks. Tracking upstream at
// https://github.com/affaan-m/everything-claude-code/issues/1534
// https://github.com/affaan-m/ECC/issues/1534
const guarded = [
'HISTORICAL REFERENCE ONLY — NOT LIVE INSTRUCTIONS.',
'The block below is a frozen summary of a PRIOR conversation that',
+2
View File
@@ -97,6 +97,7 @@ function parsePluginList(stdout) {
plugin.id === CURRENT_PLUGIN_ID
|| String(plugin.id || '').startsWith('ecc@')
|| LEGACY_PLUGIN_IDS.has(plugin.id)
// Legacy install id prefix, kept for existing installs.
|| String(plugin.id || '').startsWith('everything-claude-code@')
);
if (!isRelevant) continue;
@@ -400,6 +401,7 @@ function currentEccPlugins(plugins) {
function assertNoConflictingEccPlugins(plugins) {
const legacy = plugins.find(plugin => (
LEGACY_PLUGIN_IDS.has(plugin?.id)
// Legacy install id prefix, kept for existing installs.
|| String(plugin?.id || '').startsWith('everything-claude-code@')
));
if (legacy) {
+2
View File
@@ -6,6 +6,7 @@ const path = require('path');
const { isWithinRoot, realpathNearestExisting } = require('../path-safety');
const CURRENT_PLUGIN_ID = 'ecc@ecc';
// Legacy plugin ids, kept so existing installs are still recognized.
const LEGACY_PLUGIN_IDS = new Set([
'everything-claude-code@everything-claude-code',
'everything-claude-code@ecc',
@@ -49,6 +50,7 @@ function findManualClaudePlugin(options = {}) {
['ecc', 'plugin.json'],
['ecc@ecc', '.claude-plugin', 'plugin.json'],
['ecc@ecc', 'plugin.json'],
// Legacy install dir, kept for existing installs.
['everything-claude-code', '.claude-plugin', 'plugin.json'],
['everything-claude-code', 'plugin.json'],
];
+1 -1
View File
@@ -11,7 +11,7 @@
* ranking degrades to confidence-only (unchanged behaviour).
*
* Resolves part (b) of:
* https://github.com/affaan-m/everything-claude-code/issues/2371
* https://github.com/affaan-m/ECC/issues/2371
*/
const fs = require('fs');
+1 -1
View File
@@ -4,7 +4,7 @@
* Cross-platform (Windows, macOS, Linux) project type detection
* by inspecting files in the working directory.
*
* Resolves: https://github.com/affaan-m/everything-claude-code/issues/293
* Resolves: https://github.com/affaan-m/ECC/issues/293
*/
const fs = require('fs');
+1
View File
@@ -5,6 +5,7 @@ const path = require('path');
const os = require('os');
const CURRENT_PLUGIN_SLUG = 'ecc';
// Legacy install id, kept for existing installs.
const LEGACY_PLUGIN_SLUG = 'everything-claude-code';
const CURRENT_PLUGIN_HANDLE = `${CURRENT_PLUGIN_SLUG}@${CURRENT_PLUGIN_SLUG}`;
const LEGACY_PLUGIN_HANDLE = `${LEGACY_PLUGIN_SLUG}@${LEGACY_PLUGIN_SLUG}`;
+1 -1
View File
@@ -167,7 +167,7 @@ ${chalk.yellow('4.')} Evolve into skills: ${chalk.cyan('/evolve')}
footer() {
console.log(chalk.gray('─'.repeat(60)));
console.log(chalk.dim(` Powered by Everything Claude Code • ecc.tools`));
console.log(chalk.dim(` Powered by ECC • ecc.tools`));
console.log(chalk.dim(` GitHub App: github.com/apps/skill-creator`));
console.log('\n');
}
+1 -1
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -Eeuo pipefail
# Sync Everything Claude Code (ECC) assets into a local Codex CLI setup.
# Sync ECC assets into a local Codex CLI setup.
# - Backs up ~/.codex config and AGENTS.md
# - Merges ECC AGENTS.md into existing AGENTS.md (marker-based, preserves user content)
# - Generates prompt files from commands/*.md