Commit Graph
681 Commits
Author SHA1 Message Date
haelyra 8fc06b13cb maint: integrate reviewed contribution #3562 2026-10-29 11:26:56 -07:00
haelyra 124887fd3b maint: integrate reviewed contribution #3748 2026-10-29 11:26:55 -07:00
haelyra c7db9b410f maint: integrate reviewed contribution #3657 2026-10-29 11:25:29 -07:00
haelyra f77db133ac maint: integrate reviewed contribution #3614 2026-10-29 11:25:23 -07:00
haelyra a60c58ab42 maint: integrate reviewed contribution #3780 2026-10-29 11:25:19 -07:00
haelyra d2c71fd0e9 maint: integrate reviewed contribution #3588 2026-10-29 11:25:18 -07:00
haelyra 3a346e5109 maint: integrate reviewed contribution #3587 2026-10-29 11:25:13 -07:00
haelyra 7bc0b1a6a9 maint: integrate reviewed contribution #3631 2026-10-29 11:23:22 -07:00
haelyra cbdd9be209 maint: integrate reviewed contribution #3778 2026-10-29 11:23:21 -07:00
haelyra 8e00137b04 fix: integrate observer identity and lease repair with canonical root matching 2026-10-29 11:19:43 -07:00
Ali Arslan 7b3075180f test(opencode): assert the stub removal was attempted 2026-10-29 01:29:23 +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
Yann Roberto f1f542044c fix(install): accept all supported component families in config 2026-10-28 16:58:35 +08:00
Muhammad Zubair b3b13350d1 test: isolate HOME in the test files that write to the real home directory 2026-10-28 12:20:21 +05:00
Gaurav Dubey dc9bb9f2d9 fix(hooks): keep inline resolver backslash-free so hooks parse on Windows
On native Windows, Claude Code runs each hook as `bash.exe -c "<command>"`
through the Windows command line. That extra unescape layer collapses the
backslashes in the WSL path conversion of the inline plugin-root resolver,
so `.replace(/\\/g,'/')` reaches node as `.replace(/\/g,'/')` and every hook
fails with `SyntaxError: missing ) after argument list`.

Build the backslash separator with String.fromCharCode(92) and split/join
instead of regex escapes, so the resolver contains no backslash. Conversion
behaviour is unchanged. Regenerate every embedded copy (hooks.json,
codex-hooks.json, commands/*.md) and refresh hooks.metadata.json
fingerprints.

Add a test that the resolver and each hook `node -e` program are
backslash-free, and run the shipped SessionStart command through bash with
backslashes collapsed the way Windows does.

Fixes #3746
2026-10-26 18:39:04 +00:00
haelyra 0e7588cec5 Integrate L4XB PR #3667 2026-10-25 19:30:50 -04:00
haelyra f390400944 Merge pull request #3583 from Tivonsico/fix/skill-run-timestamp-type-20261014
fix(skill-tracker): reject non-string execution timestamps
2026-10-25 19:16:34 -04: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
Gaurav Dubey b98bff4a45 fix(observer): keep project context and leases aligned after remote changes
Integrates #3697 on current main. Prefer the observer project ID, retain a sole legacy ID until the new observer folder exists, and release the ending session lease across same-root aliases. Replace the unsafe live merge hint with read-only project inspection, and validate alias IDs before path use. #3711 independently identified the computed-ID selection gap; its early switch without observer data and unchanged SessionEnd path were not adopted.
2026-10-25 17:54:47 -04:00
haelyra 90d94d4424 test: fix Windows install and ck hook expectations 2026-10-25 14:46:45 -04:00
L4XB 10e7c5800f fix(hooks): recognize Prettier's TypeScript and JSON5 config files
Prettier's config searcher also reads .prettierrc.json5, .prettierrc.ts/.mts/.cts and prettier.config.ts/.mts/.cts. resolve-formatter knew none of them, so a project configured only through prettier.config.ts was never formatted by post-edit-format, quality-gate or the Stop batch. config-protection's rc pattern stopped at .yaml/.toml, so an existing .prettierrc.ts or .prettierrc.json5 could be edited freely.
2026-10-22 23:51:32 +02:00
yyx db29f112ff fix(hooks): preserve usage records at transcript tail boundaries 2026-10-21 14:58:50 +08:00
haelyra 6e11d21dd1 Merge branch 'stewardship/verified-pr-batch-3538-3566' into stewardship/verified-pr-batch-3602-3621-owned 2026-10-20 18:41:32 -04:00
haelyra a6db53f835 fix(inspection): normalize diagnostic-looking Windows filenames 2026-10-20 18:41:19 -04:00
haelyra 071e1fea6d fix(integration): address reviewer portability and guidance 2026-10-20 18:40:59 -04:00
haelyra fcff074e6f Merge branch 'stewardship/verified-pr-batch-3538-3566' into stewardship/verified-pr-batch-3602-3621-owned 2026-10-20 18:28:33 -04:00
haelyra c04d00c15e fix(integration): address review findings in docs and diagnostics 2026-10-20 18:17:37 -04:00
haelyra 45a021ea11 test: remove extra trailing blank line from installer coverage 2026-10-20 17:41:33 -04:00
Eneko Ruiz 21e0ab5271 fix(session-aliases): reject array-shaped alias maps
(cherry picked from commit b1668579f6)
2026-10-20 17:40:59 -04:00
Eneko Ruiz 0bdb6a52ab fix: validate session alias titles before saving
(cherry picked from commit e4f9aac414)
2026-10-20 17:40:58 -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
Eneko Ruiz f1c6692f99 fix: include the oldest dashboard window boundary
(cherry picked from commit e32d1a4e4d)
2026-10-20 17:40:58 -04:00
Eneko Ruiz 8f72869987 fix: reject negative execution counters
(cherry picked from commit fed9eebed5)
2026-10-20 17:40:57 -04:00
Eneko Ruiz 3ac640f6cc fix: sort missing inspection dates after pre-epoch timestamps
(cherry picked from commit 774dfd6894)
2026-10-20 17:40:57 -04:00
Eneko Ruiz c2a28b2963 fix: order failure pattern timestamps chronologically
(cherry picked from commit 075d55e9cb)
2026-10-20 17:40:57 -04:00
haelyra 14693070a1 fix: normalize apostrophes inside quoted Windows paths
(cherry picked from commit 8ab9358e18)
2026-10-20 17:38:38 -04:00
Eneko Ruiz c73353e2c7 fix: normalize Windows backup filename suffixes
(cherry picked from commit f685582ebe)
2026-10-20 17:38:38 -04:00
Eneko Ruiz 9388e06ec7 fix: preserve diagnostics after extensionless Windows paths
(cherry picked from commit 2a2e6e3848)
2026-10-20 17:38:38 -04:00
Eneko Ruiz 58b191c25d fix: normalize trailing Windows paths and spaced filenames
(cherry picked from commit c31b1dd80c)
2026-10-20 17:38:38 -04:00
Eneko Ruiz 0931f66775 fix: normalize Windows paths containing spaces and Unicode
(cherry picked from commit 25b775edc1)
2026-10-20 17:38:37 -04:00
Eneko Ruiz 9824f422d2 fix: normalize Windows file paths in failure patterns
(cherry picked from commit e0de4739a9)
2026-10-20 17:38:37 -04:00
30b68924ae fix(install): treat .pi as a foreign platform path (#3560)
The platform-configs module lists `.pi`, but PLATFORM_SOURCE_PATH_OWNERS
had no entry for it, so isForeignPlatformPath() returned false and every
install-apply target (e.g. `--target opencode`) copied the Pi harness
adapter (.pi/README.md, .pi/extensions/*) into its config root and
recorded it as ECC-managed.

Pi consumes ECC through `pi install`, not install-apply, so map `.pi` to
the `pi` owner. No install target has that id, so the directory is now
filtered out everywhere, like `.codex`, `.cursor`, and `.zed`.

Add regression tests for the opencode plan and for every registered
target.

Fixes #3558

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: haelyra <49814733+haelyra@users.noreply.github.com>
2026-10-20 15:37:53 -04:00
haelyra a31dfbf0e4 Merge branch 'main' into fix/jsonc-opencode-config-membership-check 2026-10-20 15:18:17 -04:00
Affaan Mustafa 5af4395e5c test(lib): cover five untested scripts/lib modules (#3641)
* test(lib): cover feedback-links routes and payload

Pins the three public issue routes to the ECC repository and checks each template name actually exists under .github/ISSUE_TEMPLATE. Also locks the ecc.feedback.v1 payload shape, the no-diagnostics-upload promise, and that every call returns fresh copies so a caller cannot alter the frozen route table.

* test(lib): cover cursor-agent-names prefixing and path handling

Pins the ecc- prefix rule the Cursor install applies to agent files: idempotent, lowercase-prefix only, empty names pass through. Covers the relative path variant across backslash, repeated, and trailing separators, and that a leading separator cannot re-root the destination under the target agents directory.

* test(lib): cover agent-tool-map Pi mapping and authority invariant

Pins the Claude to Pi tool table: six core tools, every target a real Pi built-in, and read-only tools never escalating to bash, edit, or write. Covers the unsupported path for MCP, web, unknown, empty, and non-string names, and that prototype member names like constructor are not treated as table hits.

* test(lib): cover compute-sponsor URL and passive copy

Pins the compute URL to the bare https route with no path, query, or credentials, and that the sponsor copy links it exactly once and nowhere else. Locks the wording that keeps the link passive, keeps the ecc ito find bridge opt-in and non-reserving, and does not claim managed inference is live. The existing surface test only reads docs and CLI output, so the module itself had no direct test.

* test(lib): cover invocation-environment precedence and isolation

Pins the three branches every install path relies on: an explicit env is copied and wins, a scoped homeDir yields an empty environment so ambient variables cannot leak into a contained install, and anything else snapshots process.env. Also checks the copy is shallow, own-keys only, and never writes back.
2026-10-19 18:41:26 -04:00
Bortlesboat dcf27b8361 perf(proximity): bound memory for large line ranges
Count overlap from merged inclusive intervals instead of enumerating every
covered line. Preserve the overlap coefficient and whole-file behavior.

Cover equivalence, input immutability and billion-line spans under a bounded
child heap.

Related: #3018
Signed-off-by: Bortlesboat <169967362+Bortlesboat@users.noreply.github.com>
2026-10-19 00:14:28 -04:00