mirror of
https://github.com/garrytan/gbrain.git
synced 2026-07-27 22:15:33 +00:00
The v0.41.16.0 probe module (runConversationParserNightlyProbe) shipped as a callable phase with its scheduler wire-up deferred; the follow-up never landed. Result: zero call sites — the enable flag did nothing, the D10 tokenmax default-on never fired, and doctor's conversation_parser_probe_health was a hardcoded 'Skipped' stub that ignored config and mode. This adds the deferred wiring as autopilot step 4.6, mirroring the nightly quality probe (4.5): - Flag reads dual-plane (DB row from gbrain config set wins; file plane fallback); search.mode=tokenmax keeps the probe default-on per D10. - Fixtures resolve from the gbrain package root (the committed test/fixtures/conversation-formats/), NOT the brain repoPath. Compiled binaries carry no source tree: skip quietly with a once-per-process stderr note instead of writing failure rows that would flip doctor to WARN on every binary install. - New parser-probe audit trail (audit-parser-probe.ts, shared audit-writer primitive, parser-probe-YYYY-Www.jsonl). rate_limited outcomes are NOT logged: the loop ticks every few minutes, so auditing each skip would flood the file. The 24h gate (parserProbeRanWithin) reads real outcomes. - Doctor stub replaced with computeConversationParserProbeHealthCheck: enable hint when off+silent, WARN on any non-pass run in 7 days. - try/catch posture identical to 4.5 — a probe failure never crashes the loop and never bumps consecutiveErrors. Tests: audit round-trip + rate-limit gate, doctor check branches, and source-shape pins for the wiring protections. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FQgByq4aqQq2PP8UHCdnfk
52 lines
2.1 KiB
TypeScript
52 lines
2.1 KiB
TypeScript
/**
|
|
* Tests for computeConversationParserProbeHealthCheck — the pure function
|
|
* behind doctor's conversation_parser_probe_health check, which replaced
|
|
* the v0.41.13.0 hardcoded "Skipped" stub when the autopilot wiring
|
|
* landed. Mirrors the branch coverage style of the quality-probe check.
|
|
*/
|
|
import { describe, expect, test } from 'bun:test';
|
|
|
|
import { computeConversationParserProbeHealthCheck } from '../src/commands/doctor.ts';
|
|
|
|
const ev = (outcome: string, reason?: string, ts = new Date().toISOString()) => ({
|
|
outcome,
|
|
ts,
|
|
...(reason !== undefined ? { reason } : {}),
|
|
});
|
|
|
|
describe('computeConversationParserProbeHealthCheck', () => {
|
|
test('disabled + no events → ok with paste-ready enable hint', () => {
|
|
const check = computeConversationParserProbeHealthCheck(false, []);
|
|
expect(check.status).toBe('ok');
|
|
expect(check.message).toContain('gbrain config set autopilot.conversation_parser_probe.enabled true');
|
|
});
|
|
|
|
test('enabled + no events yet → ok, next run by autopilot', () => {
|
|
const check = computeConversationParserProbeHealthCheck(true, []);
|
|
expect(check.status).toBe('ok');
|
|
expect(check.message).toContain('no probe events');
|
|
});
|
|
|
|
test('disabled flag but events exist (tokenmax mode-gate ran it) → events win over the hint', () => {
|
|
const check = computeConversationParserProbeHealthCheck(false, [ev('pass')]);
|
|
expect(check.status).toBe('ok');
|
|
expect(check.message).toContain('all pass');
|
|
});
|
|
|
|
test('any non-pass outcome in the window → warn, latest surfaced with reason', () => {
|
|
const check = computeConversationParserProbeHealthCheck(true, [
|
|
ev('pass'),
|
|
ev('adversarial_false_positive', '1 adversarial fixture(s) parsed to non-empty'),
|
|
]);
|
|
expect(check.status).toBe('warn');
|
|
expect(check.message).toContain('adversarial_false_positive');
|
|
expect(check.message).toContain('parsed to non-empty');
|
|
});
|
|
|
|
test('all pass → ok with run count', () => {
|
|
const check = computeConversationParserProbeHealthCheck(true, [ev('pass'), ev('pass')]);
|
|
expect(check.status).toBe('ok');
|
|
expect(check.message).toContain('2 probe run(s)');
|
|
});
|
|
});
|