@@ -303,7 +303,7 @@ pub const SelfAwarenessContext = struct {
303303
304304 /// Should I escalate (ask for help)?
305305 pub fn shouldEscalate (self : * const SelfAwarenessContext ) bool {
306- return self .consciousnessness .needsHelp ();
306+ return self .consciousness .needsHelp ();
307307 }
308308};
309309
@@ -954,7 +954,13 @@ test "pcc — IntrospectionResult AwarenessLevel enum coverage" {
954954
955955test "pcc — IntrospectionResult timestamp field" {
956956 const result = IntrospectionResult {
957- .model = .{},
957+ .model = .{
958+ .identity = .{},
959+ .current_state = .{},
960+ .capabilities = .{},
961+ .goals = .{},
962+ .learning_state = .{},
963+ },
958964 .timestamp = 1234567890 ,
959965 };
960966
@@ -1072,7 +1078,13 @@ test "pcc — SelfAwarenessContext isProgressing with old lesson" {
10721078
10731079test "pcc — SelfAwarenessContext shouldEscalate with stuck state" {
10741080 const context = SelfAwarenessContext {
1075- .model = .{},
1081+ .model = .{
1082+ .identity = .{},
1083+ .current_state = .{},
1084+ .capabilities = .{},
1085+ .goals = .{},
1086+ .learning_state = .{},
1087+ },
10761088 .consciousness = .{ .status = .stuck },
10771089 };
10781090
@@ -1081,7 +1093,13 @@ test "pcc — SelfAwarenessContext shouldEscalate with stuck state" {
10811093
10821094test "pcc — SelfAwarenessContext shouldEscalate with conscious state" {
10831095 const context = SelfAwarenessContext {
1084- .model = .{},
1096+ .model = .{
1097+ .identity = .{},
1098+ .current_state = .{},
1099+ .capabilities = .{},
1100+ .goals = .{},
1101+ .learning_state = .{},
1102+ },
10851103 .consciousness = .{ .status = .conscious },
10861104 };
10871105
@@ -1422,3 +1440,159 @@ test "pcc — diagnoseConsciousness loop takes priority" {
14221440
14231441 try std .testing .expectEqual (ConsciousnessState .Status .looping , state .status );
14241442}
1443+
1444+ // ═══════════════════════════════════════════════════════════════════════════════
1445+ // REAL FUNCTION TESTS — Functions that return actual calculated values
1446+ // ═══════════════════════════════════════════════════════════════════════════════
1447+
1448+ test "pcc — capabilityScore calculates partial score correctly" {
1449+ var caps = SelfModel.Capabilities {
1450+ .binaries_available = 3 , // Half of 6 = 0.15
1451+ .mcp_servers = 2 , // Below threshold = 0.0
1452+ .github_ok = true , // 0.15
1453+ .railway_ok = false , // 0.0
1454+ .telegram_ok = true , // 0.1
1455+ .farm_workers = 25 , // Half of 50 = 0.05
1456+ };
1457+
1458+ const score = caps .capabilityScore ();
1459+ // Expected: 0.15 + 0.0 + 0.15 + 0.0 + 0.1 + 0.05 = 0.45
1460+ try std .testing .expect (score > 0.4 and score < 0.5 );
1461+ }
1462+
1463+ test "pcc — capabilityScore max score with all enabled" {
1464+ var caps = SelfModel.Capabilities {
1465+ .binaries_available = 6 ,
1466+ .mcp_servers = 5 ,
1467+ .github_ok = true ,
1468+ .railway_ok = true ,
1469+ .telegram_ok = true ,
1470+ .farm_workers = 100 , // Capped at 50 for calculation
1471+ };
1472+
1473+ const score = caps .capabilityScore ();
1474+ // Max score is 1.0 (0.3 + 0.2 + 0.15 + 0.15 + 0.1 + 0.1)
1475+ try std .testing .expect (score > 0.95 );
1476+ }
1477+
1478+ test "pcc — LoopDetector record returns bool indicating loop" {
1479+ var detector = LoopDetector { .loop_threshold = 3 };
1480+
1481+ // First two should not trigger loop
1482+ try std .testing .expectEqual (false , detector .record (.farm_status ));
1483+ try std .testing .expectEqual (false , detector .record (.farm_status ));
1484+
1485+ // Third should trigger loop (threshold = 3)
1486+ try std .testing .expectEqual (true , detector .record (.farm_status ));
1487+ }
1488+
1489+ test "pcc — learnFromActionResult updates cycle_count on success" {
1490+ var model = SelfModel {
1491+ .identity = .{},
1492+ .current_state = .{},
1493+ .capabilities = .{},
1494+ .goals = .{},
1495+ .learning_state = .{},
1496+ };
1497+
1498+ const initial_count = model .current_state .cycle_count ;
1499+ const result = qt.ActionResult {
1500+ .success = true ,
1501+ .output_len = 100 ,
1502+ .duration_ms = 50 ,
1503+ };
1504+
1505+ try learnFromActionResult (& model , .farm_status , result );
1506+
1507+ try std .testing .expectEqual (initial_count + 1 , model .current_state .cycle_count );
1508+ }
1509+
1510+ test "pcc — learnFromActionResult does not update on failure" {
1511+ var model = SelfModel {
1512+ .identity = .{},
1513+ .current_state = .{ .cycle_count = 5 },
1514+ .capabilities = .{},
1515+ .goals = .{},
1516+ .learning_state = .{},
1517+ };
1518+
1519+ const result = qt.ActionResult {
1520+ .success = false ,
1521+ .output_len = 0 ,
1522+ .duration_ms = 10 ,
1523+ };
1524+
1525+ try learnFromActionResult (& model , .farm_status , result );
1526+
1527+ try std .testing .expectEqual (@as (u32 , 5 ), model .current_state .cycle_count );
1528+ }
1529+
1530+ test "pcc — describeSelf contains expected format elements" {
1531+ var model = SelfModel {
1532+ .identity = .{},
1533+ .current_state = .{},
1534+ .capabilities = .{},
1535+ .goals = .{},
1536+ .learning_state = .{},
1537+ };
1538+ @memcpy (model .identity .name [0.. 7], "Trinity" );
1539+ model .identity .name_len = 7 ;
1540+ @memcpy (model .identity .version [0.. 5], "v2.03" );
1541+ model .identity .version_len = 5 ;
1542+
1543+ const desc = try describeSelf (std .testing .allocator , model );
1544+ defer std .testing .allocator .free (desc );
1545+
1546+ // Should contain key format elements
1547+ try std .testing .expect (std .mem .indexOf (u8 , desc , "Trinity" ) != null );
1548+ try std .testing .expect (std .mem .indexOf (u8 , desc , "v2.03" ) != null );
1549+ }
1550+
1551+ test "pcc — diagnoseConsciousness returns valid ConsciousnessState" {
1552+ var model = SelfModel {
1553+ .identity = .{},
1554+ .current_state = .{},
1555+ .capabilities = .{ .binaries_available = 3 },
1556+ .goals = .{},
1557+ .learning_state = .{},
1558+ };
1559+ var detector = LoopDetector {};
1560+
1561+ const now = std .time .timestamp ();
1562+ const state = diagnoseConsciousness (model , & detector , now );
1563+
1564+ // Should return a valid status
1565+ const valid_statuses = [_ ]ConsciousnessState.Status {
1566+ .conscious , .looping , .stuck , .dead_end , .degraded ,
1567+ };
1568+ var is_valid = false ;
1569+ for (valid_statuses ) | s | {
1570+ if (state .status == s ) {
1571+ is_valid = true ;
1572+ break ;
1573+ }
1574+ }
1575+ try std .testing .expect (is_valid );
1576+ }
1577+
1578+ test "pcc — health returns CellHealth with timestamp" {
1579+ const h = health ();
1580+
1581+ // Timestamp should be recent (within last second)
1582+ const now = std .time .timestamp ();
1583+ try std .testing .expect (h .last_check > 0 );
1584+ try std .testing .expect (h .last_check <= now );
1585+ }
1586+
1587+ test "pcc — introspect populates model with real data" {
1588+ const result = try introspect (std .testing .allocator );
1589+
1590+ // Should have non-zero health score
1591+ try std .testing .expect (result .health_score >= 0.0 );
1592+
1593+ // Should have valid timestamp
1594+ try std .testing .expect (result .timestamp > 0 );
1595+
1596+ // Identity should be populated
1597+ try std .testing .expect (result .model .identity .name_len > 0 );
1598+ }
0 commit comments