From f57469283a42c0163482710dbb6a0b592b347530 Mon Sep 17 00:00:00 2001 From: swapnil <78632212+swapnilpaliwal-sd@users.noreply.github.com> Date: Fri, 2 Oct 2026 13:04:22 -0700 Subject: [PATCH 1/2] tests: a failing case prints the tail of its output, where a traceback names the error Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com> --- tests/run.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/run.py b/tests/run.py index 863a7c06..772ba182 100755 --- a/tests/run.py +++ b/tests/run.py @@ -97,7 +97,9 @@ def print(*a, flush=False, **k): builtins.print(*a, file=buf, **k) if bad: fail += 1; print(f"FAIL {l}/{name}: {ch['why']}", flush=True) for b in bad: print(f" missing/unwanted: {b}") - print(' ' + '\n '.join(text.strip().split('\n')[:14])) + lines = text.strip().split('\n') + # a traceback's last line is the error itself: keep the head (what it answered) and the tail (why it stopped) + print(' ' + '\n '.join(lines[:14] + (['…'] + lines[-12:] if len(lines) > 26 else lines[14:]))) elif verbose: print(f"ok {l}/{name}: {ch['why']}") if not keep: shutil.rmtree(os.path.join(path, '.axiomcode'), ignore_errors=True) return buf.getvalue(), tot, fail, pend From d65fd561d3e92943c47a325762b7f1e3dd41c749 Mon Sep 17 00:00:00 2001 From: swapnil <78632212+swapnilpaliwal-sd@users.noreply.github.com> Date: Fri, 2 Oct 2026 13:08:32 -0700 Subject: [PATCH 2/2] context: export the graph's facts before reading its edges index now warms impact's facts in the background, so a query can arrive before edge.facts exists. context never exported them and died on a missing file. Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com> --- plugins/axiomcode/skills/axiomcode/scripts/axiomcode-path | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/axiomcode/skills/axiomcode/scripts/axiomcode-path b/plugins/axiomcode/skills/axiomcode/scripts/axiomcode-path index 99210564..e719552e 100755 --- a/plugins/axiomcode/skills/axiomcode/scripts/axiomcode-path +++ b/plugins/axiomcode/skills/axiomcode/scripts/axiomcode-path @@ -997,6 +997,9 @@ class G: for r in rows: f.write('\t'.join(str(x) for x in r) + '\n') replace_file(tmp, p) def edges(self): + # exported here, not only by the verbs that call export(): `context` read edge.facts straight after `index` + # returned, while the build's warm-up was still writing it in the background, and died on a missing file + self.export() return [tuple(l.rstrip('\n').split('\t')) for l in open(os.path.join(self.facts, 'edge.facts'))] + list(self.EXTRA) def add_outside_call_edges(self): """THE HOPS NO CALL SITE EXPRESSES, as hops of this query (#1469). A gRPC client reaches the handler that serves