Commit Graph

1075 Commits

Author SHA1 Message Date
Affaan Mustafa
710c3e6f18 chore: refresh production audit lockfile 2026-05-31 02:42:40 -04:00
Affaan Mustafa
72a3ceeb7a test: keep stable backport assertions scoped 2026-05-31 02:40:02 -04:00
Affaan Mustafa
7cb0cf0433 Revert "fix: warn when populated legacy ~/.claude/homunculus exists (#2036)"
This reverts commit 6048821a0f.
2026-05-31 02:38:31 -04:00
Affaan Mustafa
4d71e8eb1f chore: prepare v1.10.1 stable release 2026-05-31 02:36:13 -04:00
Affaan Mustafa
7f3bc8f1e2 docs: update contribution links for ECC repo 2026-05-31 02:34:27 -04:00
Evan Alferez
654c899b56 fix(docs): sync marketplace add URL across translated READMEs (#2050)
PR #2050 updated the root README.zh-CN.md install commands after the
everything-claude-code → ECC rename, but the same stale marketplace URL
remained in nine docs/<locale>/README.md copies. Align those quick-start
and self-hosted install blocks so /plugin install ecc@ecc resolves the
ecc marketplace instead of everything-claude-code.
2026-05-31 02:34:11 -04:00
Tommy Tyrnov-Tuchin
72d95caf68 fix(commands): resolve active plugin root in /instinct-status (#2037)
The `/instinct-status` slash command template expanded
`${CLAUDE_PLUGIN_ROOT}` directly and documented a manual-install
fallback to `~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py`.
When users had both an active plugin install (under
`~/.claude/plugins/cache/<slug>/<org>/<version>/`) and a legacy
`~/.claude/skills/continuous-learning-v2/` directory left over from a
previous manual install, an empty `CLAUDE_PLUGIN_ROOT` (which Claude
Code does not always populate in slash-command shell contexts) silently
made the command read the stale legacy install while the active plugin
hooks and observer wrote to the new XDG path. The user saw "No
instincts found" while the system was actively learning — exactly the
divergence the bug reporter spent hours diagnosing.

Replace the brittle two-block template with the same inline resolver
pattern that `hooks/hooks.json` and `/sessions` / `/skill-health`
already use: env var → standard install → known plugin roots → plugin
cache walk → fallback. The resolver is the canonical `INLINE_RESOLVE`
constant from `scripts/lib/resolve-ecc-root.js`, so no new code is
introduced — just consistent adoption of the existing pattern.

Apply the same fix to all five copies of the command:
  - commands/instinct-status.md (canonical)
  - .opencode/commands/instinct-status.md
  - docs/zh-CN/commands/instinct-status.md
  - docs/ja-JP/commands/instinct-status.md
  - docs/tr/commands/instinct-status.md

Extend tests/lib/command-plugin-root.test.js with an assertion that the
canonical instinct-status.md uses the inline resolver and no longer
hard-codes the legacy `~/.claude/skills/...` fallback (regression
guard).

zh-CN copy: polish the Chinese phrasing per LanguageTool feedback
(`使用与 ... 相同的解析器` → `以与 ... 相同的解析器`) so the verb is
introduced by an explicit preposition instead of reading as an awkward
verb-object construction.
2026-05-31 02:33:18 -04:00
Matt Van Horn
6048821a0f fix: warn when populated legacy ~/.claude/homunculus exists (#2036)
After the XDG migration the CLI reads from
$XDG_DATA_HOME/ecc-homunculus/ (default ~/.local/share/ecc-homunculus/),
but installs that retained an older manual copy at ~/.claude/homunculus/
saw observations land in the new location while `instinct-cli.py status`
silently continued to look at the new directory only. The reporter
spent hours tracing the divergence because nothing surfaced the legacy
tree.

Add `_detect_legacy_homunculus_dir()` which returns the legacy path
when ~/.claude/homunculus/ contains real ECC state (projects/,
instincts/, evolved/, or observations.jsonl) and the active
HOMUNCULUS_DIR is different. `cmd_status` calls it at the bottom of
its output and prints a one-time, scoped warning that names both
paths and points at the existing migrate-homunculus.sh script.

Empty placeholder directories (just ~/.claude/homunculus/ with no
content) are ignored so users who have already migrated and left the
empty shell behind don't get nagged on every status call.

Tests cover three branches: populated legacy dir triggers the warning,
absent legacy dir stays silent, and empty placeholder legacy dir stays
silent.
2026-05-31 02:32:24 -04:00
Tommy Tyrnov-Tuchin
3c32a017a2 fix(continuous-learning): bump observer MAX_TURNS default to 50 (#2035)
The observer's MAX_TURNS default of 20 was systematically insufficient
for the MAX_ANALYSIS_LINES default of 500. First-cycle analysis on a
fresh project consistently failed with "Reached max turns (20)", forcing
users to either raise ECC_OBSERVER_MAX_TURNS or lower
ECC_OBSERVER_MAX_ANALYSIS_LINES before the observer became useful.

Pair the defaults so the out-of-the-box experience succeeds: bump
MAX_TURNS to 50 (the value the reporter empirically settled on for the
500-line default). The safety floor (turns < 4 falls back to default) is
preserved.

Test asserting the default constant is updated alongside the source.
2026-05-31 02:31:28 -04:00
Chris Yau
8dc02218db fix: null-safe package.json access in getRepoChecks
Review follow-up (CodeRabbit + cubic): switching to safeParseJson at line
389 means packageJson can be null on a missing/malformed package.json, but
the quality-ci-validations check dereferenced packageJson.scripts before the
optional chaining could help — throwing TypeError instead of degrading.
Guard the base object with packageJson?.scripts?.test at the access site,
matching the file's existing convention (e.g. line 220 uses packageJson?.name).

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-05-31 02:30:12 -04:00
Chris Yau
d82a37444a fix: guard two script edge cases
- scripts/harness-audit.js: getRepoChecks() parsed package.json with raw
  JSON.parse(readText(...)), while the rest of the file (lines 218, 822)
  uses the tolerant safeParseJson(safeRead(...)). In repo target mode a
  project lacking package.json — or with malformed JSON — threw an uncaught
  exception and crashed the audit instead of degrading. Match the existing
  convention so the audit tolerates a missing/invalid package.json.

- skills/frontend-slides/scripts/export-pdf.sh: `set -- "${POSITIONAL[@]}"`
  expands an empty array under `set -u` on bash 3.2 (the macOS system bash),
  aborting with "POSITIONAL[@]: unbound variable" instead of printing the
  usage message when invoked with no positional args. Guard the expansion
  with ${POSITIONAL[@]+"${POSITIONAL[@]}"} (no-op safe under bash 3.2 set -u).

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-05-31 02:30:08 -04:00
Affaan Mustafa
846ffb75da chore: ship v1.10.0 release surface refresh v1.10.0 2026-04-05 13:20:18 -07:00
Affaan Mustafa
5df943ed2b feat: add nestjs development patterns 2026-04-02 18:27:51 -07:00
Affaan Mustafa
b10080c7dd fix: respect home overrides in hook utilities 2026-04-02 18:22:07 -07:00
Affaan Mustafa
8bd5a7a5d9 fix: restore markdownlint baseline on main 2026-04-02 18:05:27 -07:00
Affaan Mustafa
16e9b17ad7 fix: clean up observer sessions on lifecycle end 2026-04-02 18:02:29 -07:00
Affaan Mustafa
be0c56957b feat: add jira integration workflow 2026-04-02 17:51:03 -07:00
Affaan Mustafa
badccc3db9 feat: add C# and Dart language support 2026-04-02 17:48:43 -07:00
Affaan Mustafa
31c9f7c33e feat: add web frontend rules and design quality hook 2026-04-02 17:33:17 -07:00
Affaan Mustafa
a60d5fbc00 fix: port ci and markdown cleanup from backlog 2026-04-02 17:09:21 -07:00
Affaan Mustafa
70be8f9f44 fix: add POSIX fallback for observer lazy-start 2026-04-02 17:07:32 -07:00
Affaan Mustafa
635fcbd715 refactor: consolidate writing voice rules 2026-04-02 15:45:19 -07:00
Affaan Mustafa
bf3fd69d2c refactor: extract social graph ranking core 2026-04-02 02:51:24 -07:00
Affaan Mustafa
31525854b5 feat(skills): add brand voice and network ops lanes 2026-04-01 19:41:03 -07:00
Affaan Mustafa
8f63697113 fix: port safe ci cleanup from backlog 2026-04-01 16:09:54 -07:00
Affaan Mustafa
9a6080f2e1 feat: sync the codex baseline and agent roles 2026-04-01 16:08:03 -07:00
Affaan Mustafa
dba5ae779b fix: harden install and codex sync portability 2026-04-01 16:04:56 -07:00
Affaan Mustafa
401966bc18 feat: expand lead intelligence outreach channels 2026-04-01 11:37:26 -07:00
Affaan Mustafa
1abeff9be7 feat: add connected operator workflow skills 2026-04-01 02:37:42 -07:00
Affaan Mustafa
975100db55 refactor: collapse legacy command bodies into skills 2026-04-01 02:25:42 -07:00
Affaan Mustafa
6833454778 fix: dedupe managed hooks by semantic identity 2026-04-01 02:16:32 -07:00
Affaan Mustafa
e134e492cb docs: close bundle drift and sync plugin guidance 2026-04-01 02:13:09 -07:00
Affaan Mustafa
f3db349984 docs: shift repo guidance to skills-first workflows 2026-04-01 02:11:24 -07:00
Affaan Mustafa
5194d2000a docs: tighten voice-driven content skills 2026-04-01 01:31:40 -07:00
Affaan Mustafa
43ac81f1ac fix: harden reusable release tag validation 2026-03-31 23:00:58 -07:00
Affaan Mustafa
e1bc08fa6e fix: harden install planning and sync tracked catalogs 2026-03-31 22:57:48 -07:00
Affaan Mustafa
03c4a90ffa fix: update ecc2 ratatui dependency 2026-03-31 18:23:29 -07:00
Affaan Mustafa
d4b5ca7483 docs: tighten pr backlog classification 2026-03-31 18:21:05 -07:00
Affaan Mustafa
51a87d86d9 docs: add working context file 2026-03-31 18:08:59 -07:00
Affaan Mustafa
a273c62f35 fix: restore ci lockfile and hook validation 2026-03-31 18:00:07 -07:00
Affaan Mustafa
b41b2cb554 docs: add Claude Code troubleshooting workarounds 2026-03-31 15:15:09 -07:00
Affaan Mustafa
1744e1ef0e feat: add gemini install target 2026-03-31 15:13:20 -07:00
Affaan Mustafa
f056952e50 refactor: fold social graph ranking into lead intelligence 2026-03-31 15:02:19 -07:00
Affaan Mustafa
97d9607be5 chore: ignore local orchestration artifacts 2026-03-31 14:58:59 -07:00
Affaan Mustafa
44dfc35b16 fix(security): remove evalview-agent-testing skill — external dependency
Removed skills/evalview-agent-testing/ which required `pip install evalview`
from an unvetted third-party package. ECC skills must be self-contained
and not require installing external packages to function.

If we need agent regression testing, we build it natively in ECC.
2026-03-31 14:27:09 -07:00
Affaan Mustafa
e85bc5fe87 Revert "feat: install claude-hud plugin (jarrodwatts/claude-hud) (#1041)"
This reverts commit 0c9b024746.
2026-03-31 14:20:26 -07:00
Affaan Mustafa
d0e5caebd4 Revert "feat(skills): add orch-runtime skill for persistent AI agent team dispatch (#559)"
This reverts commit 9908610221.
2026-03-31 14:19:40 -07:00
Alex
9908610221 feat(skills): add orch-runtime skill for persistent AI agent team dispatch (#559)
Adds integration skill for ORCH (@oxgeneral/orch) — a TypeScript CLI runtime
that coordinates Claude Code, OpenCode, Codex, and Cursor agents as a typed
engineering team with formal state machine, auto-retry, and inter-agent messaging.

Use this skill when ECC tasks need to survive multiple sessions, require a review
gate before completion, or involve a persistent specialized agent team.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Affaan Mustafa <me@affaanmustafa.com>
2026-03-31 14:13:43 -07:00
Neha Prasad
a2b3cc1600 feat(opencode): add changed-files tree with change indicators (#815)
* feat(opencode): add changed-files tree with change indicators

* feat(opencode): address changed-files review feedback

---------

Co-authored-by: Affaan Mustafa <me@affaanmustafa.com>
2026-03-31 14:13:37 -07:00
Hidai Bar-Mor
0f40fd030c feat(skills): add evalview-agent-testing skill and MCP server (#828)
* feat(skills): add evalview-agent-testing skill and MCP server

Add EvalView as a regression testing skill for AI agents. EvalView
snapshots agent behavior (tool calls, parameters, output), then diffs
against baselines after every change — catching regressions before they
ship.

Skill covers:
- CLI workflow (init → snapshot → check → monitor)
- Python API (gate() / gate_async() for autonomous loops)
- Quick mode (no LLM judge, $0, sub-second)
- CI/CD integration (GitHub Actions with PR comments)
- MCP integration (8 tools for Claude Code)
- Multi-turn test cases
- OpenClaw integration for autonomous agents

Also adds evalview MCP server to mcp-servers.json.

* fix(skills): pin action SHA and remove unvetted external links

- Pin hidai25/eval-view action to commit SHA instead of @main
- Replace external GitHub links with PyPI package link (vetted registry)

Addresses cubic-dev-ai review feedback.

* fix(skills): replace third-party action with pip install + CLI

Use plain pip install + evalview CLI instead of a third-party GitHub
Action. No external actions, no secrets passed to unvetted code.

Addresses cubic-dev-ai supply-chain review feedback.

* fix(skills): add destructive revert warning for gate_or_revert

Add prominent warning that gate_or_revert runs git checkout,
discarding uncommitted changes. Documents the revert_cmd override
for safer alternatives like git stash.

Addresses cubic-dev-ai review feedback.

* fix(skills): pin pip version range and document fail-on tradeoffs

- Pin evalview to >=0.5,<1 to prevent breaking CI on major upgrades
- Document --fail-on REGRESSION vs --strict tradeoff so users
  understand what gates and what passes through

Addresses greptile-apps review feedback.

* fix: use python3 -m evalview for venv compatibility in MCP config

Follows the same pattern as insaits entry. Resolves correctly even
when evalview is installed in a virtual environment that isn't on
the system PATH.

* fix: align MCP install command with mcp-servers.json pattern

Use python3 -m evalview mcp serve consistently across both the
skill docs and the MCP config catalog.

* fix: use evalview CLI entry point for MCP command

pip install evalview installs the evalview binary to PATH, so using
it directly is consistent with the install docs and avoids python3
version mismatch issues.

* fix: pin install version to match CI section

* fix: pin all pip install references consistently

* fix: add API key placeholder and pin install version in MCP config

Add OPENAI_API_KEY env placeholder matching other entries. Note that
the key is optional — deterministic checks work without it. Pin
install version to match skill docs.

* fix: guard score_delta format for non-scored statuses

---------

Co-authored-by: Affaan Mustafa <me@affaanmustafa.com>
2026-03-31 14:13:32 -07:00