mirror of
https://github.com/ruvnet/RuView
synced 2026-07-28 18:21:42 +00:00
d46eb8a4b2
harness/ruview (@ruvnet/ruview): - guardrails: digit gate now sees numbers inside code spans; F1-style metric tokens followed by ':' or a nearby number are no longer scrubbed (fail-open regressions in the honesty gate) - mcp-server: tools/call requests serialize through a FIFO promise chain (hardware/mutating tools never overlap) while ping/tools/list stay immediate; stdin close drains in-flight responses before exit - tools: which() no longer memoizes negative lookups tools/ruview-mcp (@ruvnet/rvagent): - index: realpath invoked-directly guard — library import no longer connects a stdio transport to the consumer's process - http-transport: explicit allowedOrigins is exact-match only (localhost any-port convenience applies only with no configured allowlist); session map gains maxSessions=64 + 5min idle TTL sweep - train-count: job records persist the child pid and reconcile stale 'running' status after a server restart (exit-code marker or dead pid) - config: cog binary candidates ordered by process.arch .github/workflows/ruview-npm-release.yml: port the full ADR-265 D1 gate (version-literal check, unpacked-size budget, tarball-install smoke test) from npm-packages.yml so the publish path enforces what the header claims. Tests: harness 30→36, rvagent 99→112, all passing. Co-Authored-By: claude-flow <ruv@ruv.net>
50 lines
2.0 KiB
TypeScript
50 lines
2.0 KiB
TypeScript
/**
|
|
* ADR-264 F8/O7 — cog-binary detection must be architecture-aware.
|
|
*
|
|
* detectCogBinary() itself probes hardcoded /var/lib paths, so it is not
|
|
* cheaply testable without fs mocking. The bug it fixes, however, lives purely
|
|
* in the candidate ORDER, which cogBinaryCandidates() exposes as a pure,
|
|
* arch-injectable function — that is what we pin here.
|
|
*/
|
|
|
|
import { cogBinaryCandidates } from "../src/config.js";
|
|
|
|
describe("cogBinaryCandidates()", () => {
|
|
it("probes -arm before -x86_64 on arm64 hosts", () => {
|
|
const c = cogBinaryCandidates("cog-person-count", "arm64");
|
|
const arm = c.findIndex((p) => p.endsWith("cog-person-count-arm"));
|
|
const x86 = c.findIndex((p) => p.endsWith("cog-person-count-x86_64"));
|
|
expect(arm).toBeGreaterThanOrEqual(0);
|
|
expect(x86).toBeGreaterThanOrEqual(0);
|
|
expect(arm).toBeLessThan(x86);
|
|
});
|
|
|
|
it("probes -x86_64 before -arm on x64 hosts", () => {
|
|
const c = cogBinaryCandidates("cog-person-count", "x64");
|
|
const arm = c.findIndex((p) => p.endsWith("cog-person-count-arm"));
|
|
const x86 = c.findIndex((p) => p.endsWith("cog-person-count-x86_64"));
|
|
expect(x86).toBeLessThan(arm);
|
|
});
|
|
|
|
it("defaults an unknown arch to the x86_64-first order", () => {
|
|
const c = cogBinaryCandidates("cog-pose-estimation", "riscv64");
|
|
const arm = c.findIndex((p) => p.endsWith("cog-pose-estimation-arm"));
|
|
const x86 = c.findIndex((p) => p.endsWith("cog-pose-estimation-x86_64"));
|
|
expect(x86).toBeLessThan(arm);
|
|
});
|
|
|
|
it("keeps the /usr/local/bin and bare-name PATH fallbacks last", () => {
|
|
const c = cogBinaryCandidates("cog-person-count", "arm64");
|
|
// The two arch builds come first; the /usr/local/bin fallback follows them.
|
|
expect(c[c.length - 1]).toBe("/usr/local/bin/cog-person-count");
|
|
expect(c).toHaveLength(3);
|
|
});
|
|
|
|
it("derives the id by stripping the cog- prefix once", () => {
|
|
const c = cogBinaryCandidates("cog-person-count", "x64");
|
|
expect(c[0]).toBe(
|
|
"/var/lib/cognitum/apps/person-count/cog-person-count-x86_64"
|
|
);
|
|
});
|
|
});
|