139 Commits
Author SHA1 Message Date
haelyra fc549b6372 fix: preserve Windows rule examples and conservative summary budgets
Address #3809 review regressions for CRLF code fences and inferred context capacity. Reproduced unit and actual Stop-hook failures; verified llm-summary38, Stop14, Copilot37 and independent code/security review. Keep confirmed model/ECC context authority, native budget scheduling and unknown capacity separate.
2026-10-29 17:27:56 -07:00
haelyra 0036875f86 feat(install): integrate namespaced Copilot rule instructions
Preserve contributor PR #3771 head 4114945775. Repair single-file language namespaces and preserve fenced Markdown examples. Verified 36 adapter/lifecycle and 5 support-surface tests; independent code and security review passed.
2026-10-29 17:02:31 -07:00
haelyra de8c290057 fix: keep Copilot detector explanation aligned with installed workflow 2026-10-29 13:09:04 -07:00
haelyra 1eadb741a5 fix: scope Copilot detector projection to the canonical TDD workflow 2026-10-29 11:59:19 -07:00
haelyra 0d92059410 fix: close installed workflow and review publication gaps before integration 2026-10-29 11:58:01 -07:00
haelyra 7acdf21516 maint: integrate reviewed contribution #3804 2026-10-29 11:27:57 -07:00
haelyra 8fc06b13cb maint: integrate reviewed contribution #3562 2026-10-29 11:26:56 -07:00
haelyra f77db133ac maint: integrate reviewed contribution #3614 2026-10-29 11:25:23 -07:00
haelyra 3a346e5109 maint: integrate reviewed contribution #3587 2026-10-29 11:25:13 -07:00
minteeqahmed-png 5362ffe26d fix(install): preserve mixed body line endings verbatim in Antigravity agent transform 2026-10-29 21:51:31 +05:00
minteeqahmed-png 68eb49d175 fix(install): harden Antigravity target containment, agent tools, and binary asset copies 2026-10-29 21:37:41 +05:00
Ali Arslan d2df54a2ef fix(opencode): never report repair success while the pre-fix stub is retained 2026-10-29 01:06:32 +05:00
Ali Arslan 770eb29b9f fix(opencode): remove the pre-fix declined stub the legacy migration leaves behind 2026-10-28 23:30:39 +05:00
Ali Arslan b2f4abb4c4 fix(opencode): treat the pre-fix declined factory stub as inactive during migration 2026-10-28 23:17:07 +05:00
Ali Arslan 73f61801db fix(opencode): make the declined-hooks plugin stub satisfy the V2 loader schema
The inert stub written when hook consent is not granted was
`export default async () => ({})`. OpenCode v2 validates every plugin
module before running it and requires the default export to be a definition
object with an `id` and an `effect` or `setup` function, so a declined or
runtime-less home install printed the same startup error as the V1 hook
plugin:

  PluginModule.LoadError: Plugin must export a default definition with an id
  and an effect or setup function.
  (cause: SchemaError(Expected object at ["default"]))

Write `export default { id: "ecc-hooks", setup() {} }` instead. It keeps the
inert behaviour (no imports, no module initialization of the replaced
plugin) and satisfies the loader.

Tests that pinned the generated bytes now compare against
getDisabledOpenCodePluginContent() rather than a duplicated literal, and
tests/opencode-plugin-loader-contract.test.js asserts the loader contract on
the generated payload. That test fails on the previous stub
("default export must be an object, got function").

Refs #3537. The same assertion should cover .opencode/plugins/*.ts once a V2
entrypoint lands (#3536, #3224); those plugins are scanned independently in
home installs, so both the barrel and the implementation are loaded.
2026-10-28 22:32:41 +05:00
manuel-albaneseeandCopilot 4114945775 fix(install): keep fenced code examples unchanged in copilot rules
Address CodeRabbit re-review on #3771: rewriteRuleLinks now tracks fenced
code blocks (``` and ~~~) line by line and only rewrites links outside
them, so Markdown examples shown inside fences stay verbatim. One shipped
rule contains such an example, so this changes installed output today.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-28 10:32:58 +01:00
manuel-albaneseeandCopilot 15cc7632d1 fix(install): harden copilot rule conversion edge cases
Address CodeRabbit review on #3771:

- Treat immediately empty (`---\n---`) and whitespace-only frontmatter
  blocks as empty metadata instead of throwing or leaking the delimiters
  into the installed body.
- Reject an empty `paths: []` list before serialization so an installed
  instruction never receives an empty `applyTo:` glob.
- Rewrite relative Markdown links that resolve inside the installed rule
  set to their renamed `.instructions.md` targets; links escaping rules/,
  external URLs, absolute paths, anchors, and README.md stay unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-28 10:15:38 +01:00
manuel-albanese_ssgiaandCopilot 6425693e4b feat(install): install converted rules for the copilot target
The copilot project target installed only skills and agents, dropping the
entire rules/ tree even though Copilot CLI and VS Code read path-specific
instructions from .github/instructions/**/*.instructions.md.

Plan each rules/**/*.md file into .github/instructions/ecc/ as an
.instructions.md file and add a copilot-rule-frontmatter transform that maps
the Claude-style `paths:` list onto Copilot's `applyTo:` glob list. Rules
without `paths:` become applyTo: "**", matching their always-on semantics in
Claude Code. rules/README.md documents the rule set and is not installed.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-28 01:45:40 +01:00
haelyra 7f0b6ce500 fix(install): reject malformed empty-container JSONC commas 2026-10-25 18:20:40 -04:00
haelyra f4e8f6eb3e Merge reviewed OpenCode JSONC fix from #3590 2026-10-25 18:17:10 -04:00
Alan Vo 67034687f3 Fix CLAUDE_CONFIG_DIR tilde expansion, blank path fallback, and inline WSL resolver parity
(cherry picked from commit 617ab29f8d)
2026-10-20 17:40:58 -04:00
Alan Vo 5701a4f2e1 fix: respect CLAUDE_CONFIG_DIR with WSL Windows-path conversion
(cherry picked from commit aaacbc7592)
2026-10-20 17:40:58 -04:00
Yann Roberto 0bbd0694c0 fix(install): guard MCP exclusions by payload shape
Reuse the JSON object checks before filtering MCP merge payloads so ordinary
JSON merges retain their existing behavior when ECC_DISABLED_MCPS is set.

Add 10 regression cases covering payload shapes, preview and install state,
file contents, and plan immutability. Nine cases reproduce the original
failure. All 224 cases across 10 installer/lifecycle suites pass.

Validation: changed-file ESLint (no errors), git diff --check, and apply.js
coverage of 91.05% lines, 83.70% branches, and 100% functions.
2026-10-16 09:35:47 +08:00
Hemang Varshney 8e2cdefba6 fix(install): reject unterminated comments, keep plugin shape check, handle CR endings
Address review findings on #3590:

- Unterminated block comments now throw instead of silently passing:
  {'plugin':[]} /* no longer parses, so the install keeps its
  source-context error for genuinely malformed configs (CodeRabbit,
  Greptile).
- Line-comment scanners stop at CR as well as LF, so CR-only line
  endings do not consume the rest of the file (CodeRabbit).
- activationIsInactive restores the 'plugin must be an array' shape
  check that the strict parser surfaced, so a non-array plugin no
  longer counts as inactive (Greptile).

Regression tests: unterminated comment with source context, CR-only
endings, and non-array plugin across apply/repair/doctor modes.
2026-10-15 17:49:10 +05:30
Hemang Varshney ced82ccf9f fix(install): tolerate JSONC comments in the OpenCode config membership check
The read-only plugin-membership check in activationIsInactive and the
validation inside disableOpenCodeHookPluginRegistration used strict
JSON.parse, so any user whose ~/.config/opencode/opencode.json contains
JSONC comments (which OpenCode itself accepts) could not install the
OpenCode catalog. The plan never writes the user-owned config; this
parse is purely a membership read (issue #3546).

Add a string-aware JSONC parser (line/block comments, the trailing
commas they hide, URL strings untouched) and route both call sites
through it. Truly malformed JSON keeps its source-context error.

Tests: unit coverage for comment/trailing-comma/URL handling, plus an
apply-level regression test that installs over an inactive JSONC user
config byte-for-byte, across default and declined consent modes.
2026-10-15 17:02:16 +05:30
Yann Roberto 6db65267dd fix(install): preserve excluded MCP servers in install state 2026-10-15 18:16:17 +08:00
Gaurav DubeyandClaude Opus 5.5 f45a75b5f7 fix(install): reject blank quoted Antigravity triggers in the YAML fallback
When strict YAML cannot load a rule (for example unquoted globs), the
line-based fallback treated trigger: '' as native and left the rule
without an activation trigger. Read the trigger value by hand, drop a
trailing comment and surrounding quotes, and only treat a nonblank value
as native.

Refs #3548

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 04:45:06 +00:00
Gaurav DubeyandClaude Opus 5.5 5a236c2071 fix(install): decide native Antigravity triggers from parsed YAML
Treat a rule as native only when its parsed `trigger` is a non-empty
string, so empty, comment-only, and blank-string triggers are adapted.
The line check is kept only as the fallback for native rules whose
unquoted globs cannot be parsed as YAML.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 03:59:14 +00:00
Gaurav DubeyandClaude Opus 5.5 74e9a17291 fix(install): require a value before treating an Antigravity trigger as native
An empty `trigger:` line is not a usable activation trigger, so adapt
the rule instead of passing it through unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 03:38:46 +00:00
Gaurav DubeyandClaude Opus 5.5 23ae02e144 fix(install): pass native Antigravity rules through before YAML parsing
A rule that already declares a trigger may carry unquoted
`globs: **/*.ts`, which js-yaml rejects as an alias. Detect an existing
trigger before parsing so native rules, and the adapter's own output,
pass through unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 03:17:16 +00:00
Gaurav DubeyandClaude Opus 5.5 9bb1309db6 fix(install): quote Antigravity rule globs as a YAML string
A plain YAML scalar cannot start with `*`, so `globs: **/*.py` is not
valid YAML for a strict parser. Emit the joined globs as a quoted string
and have the adapter tests parse the emitted frontmatter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 03:04:10 +00:00
Gaurav DubeyandClaude Opus 5.5 ee7156c0f6 fix(install): give Antigravity rules an activation trigger
Antigravity only attaches a workspace rule when its frontmatter declares
a trigger. The antigravity target copied rules verbatim: common rules
have no frontmatter and language rules carry Claude's `paths:` list, so
every ECC rule landed in .agents/rules/ and was never loaded.

Add an antigravity-rule-frontmatter content transform and apply it to
rule pack files on both the manifest and legacy install paths. Rules
without frontmatter become `trigger: always_on`; `paths:` becomes
`trigger: glob` with matching `globs:`. A rule that already declares a
trigger is left alone, and rules/README.md stays inert. Canonical rule
sources are unchanged.

Fixes #3548

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:39:52 +00:00
haelyra 2bfee727e2 fix(install): preserve user TypeScript module scopes and retained boundaries 2026-10-11 03:32:07 -04:00
haelyra dbfd6ab009 fix: protect commands-only CommonJS runtime in Claude installs
Reuse the existing scripts boundary asset and guard for commands-core without hooks. Preflight selected helper scopes and preserve user module metadata, unowned/edited JS interpretation, and boundary ownership through uninstall. Actual installed ESM help/JSON, receipt, reinstall/uninstall and 34 focused cases pass. OpenCode boundary 8/8, adapters 51/51, manifests 43/43; focused coverage exceeds 80%. Two root-owned legacy ESM core-profile fixtures require correction; no unsupported states weakened.
2026-10-11 03:04:04 -04:00
haelyra f58f15af30 Merge branch 'steward/install-20261011' of /Users/hira/Documents/ECC/ecc-review-install-20261011 into integration/ecc-043-20261011 2026-10-11 02:14:56 -04:00
haelyra 4f5970bf4f fix(codex): ship named CLI profile files with ownership protection
Reproduced issue #3485 on installed Codex CLI 0.162.0. Keep user legacy choices for explicit migration and verify disposable install, repair, reinstall and removal.
2026-10-11 01:55:54 -04:00
Yann Roberto d9efa98bb6 fix(install): preserve locale selections during auto-update 2026-10-11 13:41:34 +08:00
haelyra 74aace4071 fix(opencode): preserve CommonJS runtime scope and user script ownership 2026-10-10 18:53:22 -04:00
haelyra fa26ba0673 fix(qwen): reject unrepresentable empty tool authority before writes 2026-10-10 18:23:42 -04:00
haelyra be230bd85c feat: integrate reviewed adapters, conversion and GateGuard improvements 2026-10-10 17:53:23 -04:00
haelyra 113f58d8e6 fix(install): reconcile obsolete managed files without deleting edits (#3256) 2026-10-10 17:50:41 -04:00
haelyra 38c40cda73 fix: integrate fourteen reviewed runtime and hook PRs 2026-10-10 17:50:39 -04:00
haelyra e9f8c3ca66 Merge PR #3256: reconcile obsolete managed installer files safely
Preserve main OpenCode lease and activation gates and native Claude namespace receipts. Detect same-size in-place edits using bigint modification and change times during hashing and before deletion; verify both races and actual public CLI reinstall lifecycles.
2026-10-10 17:49:10 -04:00
haelyra 9d09febe5d fix(skills): scope host compatibility to target projections 2026-10-10 17:44:28 -04:00
haelyra bb15240c9c fix(install): preserve native Claude names through repair receipts 2026-10-10 17:42:43 -04:00
haelyra 07c18210eb fix(qwen): adapt managed agents before ownership receipts 2026-10-10 17:38:07 -04:00
haelyra 41ce11d889 Merge PR #3456: adapt manual Claude component references 2026-10-10 17:37:42 -04:00
haelyra 423edc1d46 Merge PR #3441: initialize OpenCode home hooks once 2026-10-10 17:36:05 -04:00
haelyra df50d56146 Merge PR #3283: serialize session alias mutations 2026-10-10 17:34:44 -04:00
Matt Van Horn e128f4398b Merge branch 'main' into cursor/skill-host-compat-ci-10d0 2026-10-10 07:09:43 -07:00