mirror of
https://github.com/affaan-m/ECC.git
synced 2026-08-23 16:02:22 +02:00
* fix: resolve issue cluster (#2295,#2298,#2303,#2304,#2305,#2306,#2340) + createdTime fallback bug - session-manager: fix createdTime birthtime||ctime fallback that never fired (a Date is always truthy); use birthtimeMs>0 check via resolveCreatedTime() - installer: rewrite source-relative rules/skills links for the injected ecc/ namespace so installed skills resolve correctly (#2340) - continuous-learning-v2: drop unused mock import (#2305); standardize bash shebangs (#2303); poll for PID file instead of fixed sleep (#2295); rename _ecc_* -> _clv2_* (#2304); align promotion confidence docs (#2298); de-brittle Scope Decision Guide cross-reference (#2306) Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix(ci): resync lockfiles with package.json (eslint 10) + migrate yarn.lock to Yarn 4 format package.json requires eslint@^10.6.0 but the committed locks pinned 9.39.2, so npm ci aborted and Yarn 4 hardened mode rejected the stale v1-classic yarn.lock (YN0028). Regenerate package-lock.json and rewrite yarn.lock in Yarn 4 (berry) format so npm ci and immutable yarn installs both pass. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix(ci): require clean probe exit for Windows shell/bash detection; add pyyaml dev dep Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix(observer): portable mktemp template on BSD/macOS (#2417); correct false attribution-disabled claim in git-workflow docs (#2426) (#2430) Co-authored-by: affaan <affaan@itomarkets.com> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: remove duplicate resolveCreatedTime introduced by merge (no-redeclare) Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: restore heading-based Scope Decision Guide ref (line numbers drift) + keep behavioral #2340 install test --------- Co-authored-by: affaan <affaan@itomarkets.com> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Affaan Mustafa <me@affaanmustafa.com>
69 lines
2.2 KiB
Bash
Executable File
69 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# One-shot migration from the legacy Claude config tree into the
|
|
# continuous-learning-v2 data directory.
|
|
set -euo pipefail
|
|
|
|
OLD="${HOME}/.claude/homunculus"
|
|
|
|
# shellcheck disable=SC1091
|
|
. "$(dirname "$0")/lib/homunculus-dir.sh"
|
|
NEW="$(_clv2_resolve_homunculus_dir)"
|
|
|
|
if [ "$NEW" = "$OLD" ]; then
|
|
echo "Resolved destination equals source ($OLD); nothing to migrate."
|
|
exit 0
|
|
fi
|
|
|
|
if [ ! -d "$OLD" ]; then
|
|
echo "Nothing to migrate (no $OLD)."
|
|
exit 0
|
|
fi
|
|
|
|
if command -v pgrep >/dev/null 2>&1; then
|
|
# pgrep -f treats its argument as an extended regular expression, so $HOME
|
|
# must be escaped before interpolation. Without this, regex metacharacters in
|
|
# the path (e.g. /home/user.name, /home/c++dev, /home/user (work)) would make
|
|
# the match over-broad or invalid, causing false negatives (observer missed,
|
|
# migration proceeds unsafely) or false positives (migration blocked).
|
|
escaped_home="$(printf '%s' "$HOME" | sed 's/[]\.[(){}+*?|^$]/\\&/g')"
|
|
if pgrep -f "${escaped_home}.*observer-loop\\.sh" >/dev/null 2>&1; then
|
|
echo "Refusing to migrate: observer-loop.sh is running." >&2
|
|
echo "Exit all Claude Code sessions, then re-run." >&2
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "Warning: pgrep not available; skipping running-observer check." >&2
|
|
fi
|
|
|
|
mkdir -p "$(dirname "$NEW")"
|
|
|
|
if [ ! -d "$NEW" ]; then
|
|
mv "$OLD" "$NEW"
|
|
echo "Moved $OLD -> $NEW"
|
|
elif [ -z "$(ls -A "$NEW" 2>/dev/null || true)" ]; then
|
|
rmdir "$NEW"
|
|
mv "$OLD" "$NEW"
|
|
echo "Moved $OLD -> $NEW (replaced empty destination)"
|
|
else
|
|
old_count="$(find "$OLD" -type f 2>/dev/null | wc -l | tr -d ' ')"
|
|
new_count="$(find "$NEW" -type f 2>/dev/null | wc -l | tr -d ' ')"
|
|
echo "Refusing to migrate: both paths exist with content." >&2
|
|
echo " Old: $OLD ($old_count files)" >&2
|
|
echo " New: $NEW ($new_count files)" >&2
|
|
echo "Resolve manually, then re-run." >&2
|
|
exit 1
|
|
fi
|
|
|
|
settings="${HOME}/.claude/settings.json"
|
|
if [ -f "$settings" ] && grep -q '"CLV2_CONFIG"' "$settings" 2>/dev/null; then
|
|
if grep -q '\.claude/homunculus' "$settings" 2>/dev/null; then
|
|
cat >&2 <<WARN
|
|
|
|
Advisory: ~/.claude/settings.json still sets CLV2_CONFIG under the old path.
|
|
Update it to: ${NEW}/config.json
|
|
(Not editing settings.json automatically.)
|
|
|
|
WARN
|
|
fi
|
|
fi
|