@@ -2240,3 +2240,68 @@ test "MemoryRecord ttl field" {
22402240
22412241// CellType and HealthStatus are not yet defined in hippocampus module
22422242// These tests will be added when the types are implemented
2243+
2244+ // ═══════════════════════════════════════════════════════════════════════════════
2245+ // REAL integration tests with file I/O (not struct padding!)
2246+ // ═══════════════════════════════════════════════════════════════════════════════
2247+
2248+ test "hippocampus — write then read roundtrip" {
2249+ const testing = std .testing ;
2250+ var tmp = testing .tmpDir (.{ .suffix = "-hippocampus" });
2251+ defer tmp .cleanup ();
2252+
2253+ // Override MEMORY_ROOT to tmp dir
2254+ const test_agent = "test-agent" ;
2255+ const test_dir = try std .fmt .allocPrint (testing .allocator , "{s}/{s}" , .{ tmp .dir .path .? , test_agent });
2256+ defer testing .allocator .free (test_dir );
2257+ try tmp .dir .makePath (test_dir );
2258+
2259+ const test_file = try std .fmt .allocPrint (testing .allocator , "{s}/current.jsonl" , .{test_dir });
2260+ defer testing .allocator .free (test_file );
2261+
2262+ // Write a record
2263+ var rec = MemoryRecord {};
2264+ const ts : u64 = 1234567890 ;
2265+ generateId (& rec .id_buf , & rec .id_len , ts , test_agent );
2266+ copyToFixed (32 , & rec .agent_buf , & rec .agent_len , test_agent );
2267+ rec .kind = .observation ;
2268+ rec .ts = ts ;
2269+ copyToFixed (256 , & rec .summary_buf , & rec .summary_len , "test observation" );
2270+
2271+ // Serialize and write manually (we can't override MEMORY_ROOT at runtime)
2272+ var buf : [4096 ]u8 = undefined ;
2273+ const json_line = try serializeRecord (& buf , & rec );
2274+
2275+ const file = try tmp .dir .createFile (test_file , .{ .truncate = false });
2276+ defer file .close ();
2277+ try file .seekFromEnd (0 );
2278+ try file .writeAll (json_line );
2279+ try file .writeAll ("\n " );
2280+
2281+ // Verify file was written
2282+ const content = try tmp .dir .readFile (test_file , testing .allocator );
2283+ defer testing .allocator .free (content );
2284+ try testing .expect (content .len > 0 );
2285+ try testing .expect (std .mem .indexOf (u8 , content , "test observation" ) != null );
2286+ }
2287+
2288+ test "hippocampus — serializeRecord produces valid JSON" {
2289+ var rec = MemoryRecord {};
2290+ const ts : u64 = 1234567890 ;
2291+ generateId (& rec .id_buf , & rec .id_len , ts , "ralph" );
2292+ copyToFixed (32 , & rec .agent_buf , & rec .agent_len , "ralph" );
2293+ rec .kind = .episode ;
2294+ rec .ts = ts ;
2295+ copyToFixed (256 , & rec .summary_buf , & rec .summary_len , "fixed a bug" );
2296+ copyToFixed (32 , & rec .tags [0 ], & rec .tag_lens [0 ], "fix" );
2297+
2298+ var buf : [4096 ]u8 = undefined ;
2299+ const json = try serializeRecord (& buf , & rec );
2300+
2301+ // Verify it's valid JSON with expected fields
2302+ try std .testing .expect (json .len > 0 );
2303+ try std .testing .expect (std .mem .indexOf (u8 , json , "\" agent\" " ) != null );
2304+ try std .testing .expect (std .mem .indexOf (u8 , json , "\" kind\" " ) != null );
2305+ try std .testing .expect (std .mem .indexOf (u8 , json , "\" episode\" " ) != null );
2306+ try std .testing .expect (std .mem .indexOf (u8 , json , "\" summary\" " ) != null );
2307+ }
0 commit comments