Architectural snapshot of the lakehouse codebase at the point where the
full matrix-driven agent loop with Mem0 versioning + deletion was
validated end-to-end.
WHAT THIS REPO IS
A clean single-commit snapshot of the lakehouse code. Heavy test data
(.parquet datasets, vector indexes) excluded — see REPLICATION.md for
regen path. Full lakehouse history at git.agentview.dev/profit/lakehouse.
WHAT WAS PROVEN
- Vector retrieval across multi-corpora matrix (chicago_permits + entity
briefs + sec_tickers + distilled procedural + llm_team runs)
- Observer hand-review (cloud + heuristic fallback) gating each candidate
- Local-model agent loop (qwen3.5:latest) with tool use + scratchpad
- Playbook seal on success → next-iter retrieval surfaces it as preamble
- Mem0 versioning + deletion in pathway_memory:
* UPSERT: ADD on new workflow, UPDATE bumps replay_count on identical
* REVISE: chains versions, parent.superseded_at + superseded_by stamped
* RETIRE: marks specific trace retired with reason, excluded from retrieval
* HISTORY: walks chain root→tip, cycle-safe
KEY DIRECTORIES
- crates/vectord/src/pathway_memory.rs — Mem0 ops live here
- crates/vectord/src/playbook_memory.rs — original Mem0 reference
- tests/agent_test/ — local-model agent harness + PRD + session archives
- scripts/dump_raw_corpus.sh — MinIO bucket dump (raw test corpus)
- scripts/vectorize_raw_corpus.ts — corpus → vector indexes
- scripts/analyze_chicago_contracts.ts — real inference pipeline
- scripts/seal_agent_playbook.ts — Mem0 upsert from agent traces
Replication: see REPLICATION.md for Debian 13 clean install + cloud-only
adaptation (no local Ollama).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
69 lines
2.7 KiB
TypeScript
69 lines
2.7 KiB
TypeScript
// One-shot dry-run audit of a single PR. Useful for verifying check
|
||
// behavior (kb_query scrum surfacing, inference prompts, etc.) without
|
||
// posting to Gitea. Does NOT touch state.json and does NOT post
|
||
// commit status or PR comments.
|
||
//
|
||
// Run: bun run auditor/audit_one.ts <pr-number>
|
||
|
||
import { getPrSnapshot } from "./gitea.ts";
|
||
import { auditPr } from "./audit.ts";
|
||
|
||
async function main() {
|
||
const prNumRaw = process.argv[2];
|
||
if (!prNumRaw) {
|
||
console.error("usage: bun run auditor/audit_one.ts <pr-number>");
|
||
process.exit(2);
|
||
}
|
||
const prNum = Number(prNumRaw);
|
||
if (!Number.isFinite(prNum)) {
|
||
console.error(`invalid PR number: ${prNumRaw}`);
|
||
process.exit(2);
|
||
}
|
||
|
||
console.log(`[audit_one] fetching PR #${prNum}...`);
|
||
const pr = await getPrSnapshot(prNum);
|
||
console.log(`[audit_one] PR #${pr.number}: "${pr.title}" (head=${pr.head_sha.slice(0, 12)})`);
|
||
console.log(`[audit_one] files in diff: ${pr.files.length}`);
|
||
for (const f of pr.files) console.log(` - ${f.path} (+${f.additions}/-${f.deletions})`);
|
||
console.log("");
|
||
|
||
const verdict = await auditPr(pr, {
|
||
dry_run: true, // no Gitea posting
|
||
skip_dynamic: true, // don't run fixture
|
||
skip_inference: process.env.LH_AUDITOR_SKIP_INFERENCE === "1",
|
||
});
|
||
|
||
console.log("\n═══ VERDICT ═══");
|
||
console.log(`overall: ${verdict.overall}`);
|
||
console.log(`one-liner: ${verdict.one_liner}`);
|
||
console.log(`findings: total=${verdict.metrics.findings_total} block=${verdict.metrics.findings_block} warn=${verdict.metrics.findings_warn} info=${verdict.metrics.findings_info}`);
|
||
console.log("");
|
||
|
||
// Print findings, highlighting kb_query scrum surfacing
|
||
const byCheck: Record<string, typeof verdict.findings> = {};
|
||
for (const f of verdict.findings) (byCheck[f.check] ||= []).push(f);
|
||
|
||
for (const [check, findings] of Object.entries(byCheck)) {
|
||
console.log(`── ${check} (${findings.length}) ──`);
|
||
for (const f of findings) {
|
||
const tag = f.severity === "block" ? "🛑" : f.severity === "warn" ? "⚠️ " : "ℹ️ ";
|
||
console.log(` ${tag} [${f.severity}] ${f.summary}`);
|
||
if (f.summary.includes("scrum-master")) {
|
||
for (const e of f.evidence) {
|
||
console.log(` → ${e.slice(0, 200)}`);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
const scrumFindings = verdict.findings.filter(f => f.summary.includes("scrum-master"));
|
||
console.log("");
|
||
console.log(`═══ SCRUM WIRE CHECK: ${scrumFindings.length} scrum-master findings surfaced by kb_query ═══`);
|
||
if (scrumFindings.length === 0) {
|
||
console.log(" (none — either no matching scrum_reviews.jsonl rows, or files didn't match PR diff)");
|
||
}
|
||
process.exit(0);
|
||
}
|
||
|
||
main().catch(e => { console.error("[audit_one] fatal:", e); process.exit(1); });
|