mirror of
https://github.com/Jeuners/ECC.git
synced 2026-09-09 15:02:30 +02:00
fix: resolve open-issue cluster (#2295, #2298, #2303–#2306, #2340) + createdTime fallback bug (#2408)
* 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>
This commit is contained in:
parent
3167852753
commit
2d40baacbd
23 changed files with 143 additions and 41 deletions
|
|
@ -145,7 +145,10 @@ analyze_observations() {
|
|||
MAX_ANALYSIS_LINES="${ECC_OBSERVER_MAX_ANALYSIS_LINES:-500}"
|
||||
observer_tmp_dir="${PROJECT_DIR}/.observer-tmp"
|
||||
mkdir -p "$observer_tmp_dir"
|
||||
analysis_file="$(mktemp "${observer_tmp_dir}/ecc-observer-analysis.XXXXXX.jsonl")"
|
||||
# Keep the XXXXXX run at the very end of the template: BSD/macOS mktemp only
|
||||
# substitutes a trailing X run, so a suffix after it (e.g. `.jsonl`) produces a
|
||||
# literal, non-random name that wedges every later cycle with "File exists" (#2417).
|
||||
analysis_file="$(mktemp "${observer_tmp_dir}/ecc-observer-analysis.jsonl.XXXXXX")"
|
||||
tail -n "$MAX_ANALYSIS_LINES" "$OBSERVATIONS_FILE" > "$analysis_file"
|
||||
analysis_count=$(wc -l < "$analysis_file" 2>/dev/null || echo 0)
|
||||
echo "[$(date)] Using last $analysis_count of $obs_count observations for analysis" >> "$LOG_FILE"
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ Validate and sanitize all user input before processing.
|
|||
|
||||
When creating instincts, determine scope based on these heuristics:
|
||||
|
||||
> **Scope Decision Guide** – See the canonical table in `skills/continuous-learning-v2/SKILL.md` (lines 271‑282).
|
||||
> **Scope Decision Guide** – See the canonical table under the "Scope Decision Guide" heading in `skills/continuous-learning-v2/SKILL.md`.
|
||||
|
||||
**When in doubt, default to `scope: project`** — it's safer to be project-specific and promote later than to contaminate the global space.
|
||||
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ fi
|
|||
|
||||
# shellcheck disable=SC1091
|
||||
. "$(dirname "$0")/../scripts/lib/homunculus-dir.sh"
|
||||
CONFIG_DIR="$(_ecc_resolve_homunculus_dir)"
|
||||
CONFIG_DIR="$(_clv2_resolve_homunculus_dir)"
|
||||
|
||||
# Skip if disabled (check both default and CLV2_CONFIG-derived locations)
|
||||
if [ -f "$CONFIG_DIR/disabled" ]; then
|
||||
|
|
@ -279,11 +279,11 @@ _SECRET_RE = re.compile(
|
|||
)
|
||||
|
||||
import signal
|
||||
def _ecc_bail(*_):
|
||||
def _clv2_bail(*_):
|
||||
print("[observe] SIGALRM timeout: parse-error fallback observation dropped before write (#2300)", file=sys.stderr)
|
||||
sys.exit(0)
|
||||
try:
|
||||
signal.signal(signal.SIGALRM, _ecc_bail)
|
||||
signal.signal(signal.SIGALRM, _clv2_bail)
|
||||
signal.alarm(8) # self-terminate before the async hook 10s timeout can orphan us (#2278)
|
||||
except Exception:
|
||||
pass
|
||||
|
|
@ -317,11 +317,11 @@ echo "$PARSED" | "$PYTHON_CMD" -c '
|
|||
import json, sys, os, re
|
||||
import signal
|
||||
|
||||
def _ecc_bail(*_):
|
||||
def _clv2_bail(*_):
|
||||
print("[observe] SIGALRM timeout: in-flight observation dropped before write (#2300)", file=sys.stderr)
|
||||
sys.exit(0)
|
||||
try:
|
||||
signal.signal(signal.SIGALRM, _ecc_bail)
|
||||
signal.signal(signal.SIGALRM, _clv2_bail)
|
||||
signal.alarm(8) # self-terminate before the async hook 10s timeout can orphan us (#2278)
|
||||
except Exception:
|
||||
pass
|
||||
|
|
@ -493,7 +493,7 @@ touch "$ACTIVITY_FILE" 2>/dev/null || true
|
|||
# the lazy-start path above. Both wrap the same read-modify-write below.
|
||||
should_signal=0
|
||||
|
||||
_ecc_bump_signal_counter() {
|
||||
_clv2_bump_signal_counter() {
|
||||
if [ -f "$SIGNAL_COUNTER_FILE" ]; then
|
||||
counter=$(cat "$SIGNAL_COUNTER_FILE" 2>/dev/null || echo 0)
|
||||
# Guard against a corrupt counter file: a non-integer value would abort the
|
||||
|
|
@ -518,7 +518,7 @@ if command -v flock >/dev/null 2>&1 && exec 8>"$SIGNAL_COUNTER_LOCK" 2>/dev/null
|
|||
# blocks indefinitely, and only bump the counter while the lock is held -- on
|
||||
# a timeout we skip the tick rather than doing an unlocked read-modify-write.
|
||||
if flock -w 2 8 2>/dev/null; then
|
||||
_ecc_bump_signal_counter
|
||||
_clv2_bump_signal_counter
|
||||
flock -u 8 2>/dev/null || true
|
||||
fi
|
||||
exec 8>&- 2>/dev/null || true
|
||||
|
|
@ -547,7 +547,7 @@ else
|
|||
done
|
||||
if [ "$_signal_lock_held" -eq 1 ]; then
|
||||
# Bump only under the held lock -- never an unlocked read-modify-write.
|
||||
_ecc_bump_signal_counter
|
||||
_clv2_bump_signal_counter
|
||||
rmdir "$SIGNAL_COUNTER_LOCK" 2>/dev/null || true
|
||||
trap - EXIT INT TERM
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
# shellcheck disable=SC1091
|
||||
. "$(dirname "${BASH_SOURCE[0]}")/lib/homunculus-dir.sh"
|
||||
_CLV2_HOMUNCULUS_DIR="$(_ecc_resolve_homunculus_dir)"
|
||||
_CLV2_HOMUNCULUS_DIR="$(_clv2_resolve_homunculus_dir)"
|
||||
_CLV2_PROJECTS_DIR="${_CLV2_HOMUNCULUS_DIR}/projects"
|
||||
_CLV2_REGISTRY_FILE="${_CLV2_HOMUNCULUS_DIR}/projects.json"
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
# 2. XDG_DATA_HOME/ecc-homunculus, when XDG_DATA_HOME is absolute
|
||||
# 3. HOME/.local/share/ecc-homunculus
|
||||
|
||||
_ecc_resolve_homunculus_dir() {
|
||||
_clv2_resolve_homunculus_dir() {
|
||||
if [ -n "${CLV2_HOMUNCULUS_DIR:-}" ]; then
|
||||
case "$CLV2_HOMUNCULUS_DIR" in
|
||||
/*) printf '%s\n' "$CLV2_HOMUNCULUS_DIR"; return 0 ;;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ OLD="${HOME}/.claude/homunculus"
|
|||
|
||||
# shellcheck disable=SC1091
|
||||
. "$(dirname "$0")/lib/homunculus-dir.sh"
|
||||
NEW="$(_ecc_resolve_homunculus_dir)"
|
||||
NEW="$(_clv2_resolve_homunculus_dir)"
|
||||
|
||||
if [ "$NEW" = "$OLD" ]; then
|
||||
echo "Resolved destination equals source ($OLD); nothing to migrate."
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ import os
|
|||
import sys
|
||||
from pathlib import Path
|
||||
from types import SimpleNamespace
|
||||
from unittest import mock
|
||||
|
||||
import pytest
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue