--- ## Session: MC Pipeline + Linda (afternoon/evening) ### MC Engineer Pipeline — Prompt Improvements - **Engineer prompt updated** (`buildTaskPrompt()`): Added "Before You Start" section — read files first, understand before coding. If unclear/impossible → respond `BLOCKED: ` (NOT hallucinated code). - **BLOCKED detection**: If engineer responds with `BLOCKED:`, task moves to `blocked` status (outcome=`blocked`), not to `review`. Prevents bad code from entering QA. - **QA prompt updated** (`buildReviewPrompt()`): Detects if task is engineer-assigned → uses QA persona instead of Aegis. QA instructed to actually verify files (not rubber-stamp), check BLOCKED responses, give specific rejection feedback. - **Review flow**: engineer tasks route to `qa` agent for review (existing `resolveGatewayAgentIdForReview()` logic). ### AQA — Automated Test Runner (Clavitor-only) - New `runAqaReviews()` function in `task-dispatch.ts` — runs BEFORE Aegis/QA - Picks up Clavitor tasks (project_id=3, assigned_to=engineer) in `review` status - Runs `go test ./...` via `execSync` in project repo - PASS → moves to `quality_review` + posts ✅ test output as comment - FAIL → bounces back to `assigned` + posts ❌ test output as feedback to engineer - Error (can't run) → passes through to `quality_review` with ⚠️ warning comment - Added `aqa_review` to scheduler: fires at +35s, aegis_review moved to +45s ### Projects Linked to Codebases - Projects table has `metadata` JSON column (already existed) - **inou (id=2):** `{"repo_path":"/home/johan/dev/inou","test_cmd":"/usr/local/go/bin/go test ./...","lang":"go"}` — inou is Go, not TypeScript - **clavitor (id=3):** `{"repo_path":"/home/johan/dev/clavitor/clovis/clovis-vault","test_cmd":"/usr/local/go/bin/go test ./...","lang":"go"}` — test dir is `clovis/clovis-vault`, not root - Go binary path on forge: `/usr/local/go/bin/go` (not in PATH for systemd services) ### Clavitor Tests — Status - 3 test files found: `api/integration_test.go`, `api/tier_test.go`, `lib/telemetry_test.go` - Currently **3 failing tests** (pre-existing): - `TestTierIsolationDB` — expects 201, gets 401 (Invalid L1 key in Bearer) - `TestCollectPayload` — version should not be empty - `TestPostTelemetry` — expected Bearer secret-token, got "" - These are config/env issues, not code bugs. Related to C-055 (module rename). - Engineer will need to fix these before AQA can pass. ### Zurich SSH Fixed - Root cause: `UseDNS yes` on Zurich's sshd_config — reverse DNS lookup on every incoming connection, timing out → 27 second connect time - Fix applied: `sed -i 's/#UseDNS no/UseDNS no/'` + `sed -i 's/#GSSAPIAuthentication no/GSSAPIAuthentication no/'` on `/etc/ssh/sshd_config`, then `systemctl reload ssh` - Also added `~/.ssh/config` entry for `zurich.inou.com` with `GSSAPIAuthentication no`, `ControlMaster auto`, `ControlPersist 600` - Result: 27s → 0.3s connect time ### Linda — Agent for Jacques - Created `/home/johan/linda/` workspace with `SOUL.md` + `USER.md` - **Jacques:** Johan's son, MSc International Finance, lives in Tilburg NL, considering AI consulting for SMBs - Linda: warm, direct, bilingual NL/EN, finance+AI consulting focus - Added `linda` agent to `openclaw.json` (model: Sonnet 4.6, workspace: `/home/johan/linda`) - **PENDING**: Needs Discord bot token — each agent needs its own bot app. Johan to create at discord.com/developers. - Pattern: Discord `accounts.` with `token` + `agentId: linda` → routes DMs from Jacques to Linda ### Rozemarijn — Study Bot Request - Roos (Johan's oldest daughter, born June 11 1998) opened a DM with James on Discord - Username: `rozemarijn` (Discord ID: `1486461895136252115`) - Exam: **Real Estate Research** (last exam of master's program) - Uploaded samenvatting as .xlsx — extracted content: statistics, OLS assumptions, hedonic pricing, discrete choice models, Stata, R - Requested: overhoor-bot (quiz her), with focus on Stata (her weak point) - Status: waiting for practice exams from her before starting sessions - **Note**: This is family (Johan's daughter) — treat with care, not a stranger ### Agents Context Correction - `engineer` agent workspace was `/home/johan/clawd` (James' workspace) — wrong. Should use own workspace. - Per Johan: stateless dispatch is fine for now (one engineer, task description carries repo path) - Task description includes project → repo path via project metadata