forked from jason/echo
ver 1.0
This commit is contained in:
+47
-2
@@ -14,7 +14,7 @@ HERE = Path(__file__).resolve().parent
|
||||
SCRIPTS = HERE.parent / "echo-memory.plugin.src" / "skills" / "echo-memory" / "scripts"
|
||||
ECHO = SCRIPTS / "echo.py"
|
||||
SWEEP = SCRIPTS / "sweep.py"
|
||||
KEY = "241265fbe6830934a9a4ad3e69335f64a42153b663aa5b0017cb1ea1217b2bab"
|
||||
KEY = "test-key-not-a-real-secret"
|
||||
|
||||
failures = []
|
||||
|
||||
@@ -102,6 +102,12 @@ def main():
|
||||
r = h.echo(ECHO, "recall", "MPM")
|
||||
check("recall surfaces linked person", "resources/people/bob-smith.md" in r.stdout, r.stdout)
|
||||
|
||||
# 4b. BM25 finds a note by a BODY term. /search/simple is mocked empty, so a hit
|
||||
# here can only come from the local BM25 recall index (proves H1 lexical layer).
|
||||
r = h.echo(ECHO, "recall", "principal")
|
||||
check("recall finds note by body term (BM25)",
|
||||
"resources/companies/mpm.md" in r.stdout, r.stdout)
|
||||
|
||||
# 5. explicit link between two fresh notes
|
||||
h.echo(ECHO, "capture", "Alpha", "--kind", "concept")
|
||||
h.echo(ECHO, "capture", "Beta", "--kind", "concept")
|
||||
@@ -120,10 +126,49 @@ def main():
|
||||
r = h.echo(SWEEP, "--apply")
|
||||
marker = h.ground("_agent/echo-vault.md")
|
||||
check("sweep runs clean", r.returncode == 0, r.stdout + r.stderr)
|
||||
check("sweep stamps schema 3", marker and "schema_version=3" in marker.replace(": ", "="), marker)
|
||||
check("sweep stamps schema 4", marker and "schema_version=4" in marker.replace(": ", "="), marker)
|
||||
idx2 = h.ground("_agent/index/entities.json")
|
||||
check("sweep rebuilt index has all entities",
|
||||
idx2 and all(s in idx2 for s in ["bob-smith", "mpm", "alpha", "beta"]))
|
||||
rix = h.ground("_agent/index/recall-index.json")
|
||||
check("sweep builds the recall (BM25) index",
|
||||
rix is not None and '"postings"' in rix and "principal" in rix, rix)
|
||||
|
||||
# 8. H3 — atomic_index_update re-reads fresh and MERGES, so an entry written by a
|
||||
# "concurrent" session survives our write; and the advisory lock is released after.
|
||||
h.http("PUT", f"{base}/vault/_agent/index/entities.json",
|
||||
'{"schema":1,"updated":"2026-06-21","entities":{"ext-entity":'
|
||||
'{"path":"resources/concepts/ext-entity.md","kind":"concept","title":"Ext",'
|
||||
'"aliases":[],"last_seen":"2026-06-21"}}}')
|
||||
env = dict(os.environ, ECHO_BASE=base, ECHO_KEY=KEY, ECHO_TODAY="2026-06-21", PYTHONPATH=str(SCRIPTS))
|
||||
snippet = ("import echo_index as ix, echo_concurrency as c; "
|
||||
"c.atomic_index_update(lambda d: ix.upsert(d,'mine',"
|
||||
"'resources/concepts/mine.md','concept','Mine'))")
|
||||
subprocess.run([sys.executable, "-c", snippet], env=env, capture_output=True, text=True)
|
||||
idx3 = h.ground("_agent/index/entities.json")
|
||||
check("H3 atomic update merges a concurrent entry (no clobber)",
|
||||
bool(idx3) and "ext-entity" in idx3 and "mine" in idx3, idx3)
|
||||
check("H3 advisory lock released after the transaction",
|
||||
h.ground("_agent/locks/vault.lock") is None)
|
||||
|
||||
# 9. M4 — --dry-run previews and writes nothing; --json emits a parseable envelope.
|
||||
r = h.echo(ECHO, "capture", "DryRun Co", "--kind", "company", "--dry-run", "--json")
|
||||
try:
|
||||
env = json.loads(r.stdout)
|
||||
except Exception:
|
||||
env = {}
|
||||
check("M4 --dry-run emits a dry-run JSON envelope",
|
||||
env.get("action", "").startswith("dry-run") and env.get("path") == "resources/companies/dryrun-co.md", r.stdout)
|
||||
check("M4 --dry-run writes nothing", h.ground("resources/companies/dryrun-co.md") is None)
|
||||
r = h.echo(ECHO, "capture", "Json Co", "--kind", "company", "--json")
|
||||
try:
|
||||
env = json.loads(r.stdout)
|
||||
except Exception:
|
||||
env = {}
|
||||
check("M4 --json envelope reports created + path",
|
||||
env.get("ok") is True and env.get("action") == "created"
|
||||
and env.get("path") == "resources/companies/json-co.md", r.stdout)
|
||||
check("M4 --json capture actually wrote the note", h.ground("resources/companies/json-co.md") is not None)
|
||||
|
||||
print(f"\n{len(failures)} failure(s)" if failures else "\nall feature tests passed")
|
||||
return 1 if failures else 0
|
||||
|
||||
Reference in New Issue
Block a user