@@ -992,20 +992,23 @@ describe("buildStarterBadge — 5-state cell vocabulary (§d)", () => {
992992 expect ( b . label ) . toBe ( "?" ) ;
993993 } ) ;
994994
995- it ( "not-supported ✗: unmapped column → gray ✗, mapping-derived (not data-derived)" , ( ) => {
996- // Keyed off isSupported=false, NOT off a missing row — so it is visually
997- // distinct from the gray `?` not-yet-run state (same tone, different glyph)
998- // AND from the red smoke-failed ✗ (different tone).
995+ it ( "not-supported 🚫: unmapped column → 🚫 unsupported chip, mapping-derived (not data-derived)" , ( ) => {
996+ // Keyed off isSupported=false, NOT off a missing row. An integration with
997+ // NO starter is architecturally unsupported in the starter row, so it
998+ // renders the SAME 🚫 "Not supported by this framework" treatment the
999+ // depth-chip/unified-cell already use — NOT a grey/no-data `?`, and NOT a
1000+ // red smoke-failed `✗` (which would mis-communicate "we tried and failed").
9991001 const b = buildStarterBadge ( "health" , false , null , NOW , "live" ) ;
1000- expect ( b . tone ) . toBe ( "gray" ) ;
1001- expect ( b . label ) . toBe ( "✗" ) ;
1002- expect ( b . tooltip ) . toBe ( "no starter for this integration" ) ;
1002+ expect ( b . label ) . toBe ( "🚫" ) ;
1003+ expect ( b . tooltip ) . toBe ( "Not supported by this framework" ) ;
1004+ // It must be visually distinct from a data-bearing red FAIL: never red.
1005+ expect ( b . tone ) . not . toBe ( "red" ) ;
10031006 expect ( b . row ) . toBeNull ( ) ;
10041007 } ) ;
10051008
1006- it ( "not-supported ✗ is independent of any row data (mapping wins)" , ( ) => {
1009+ it ( "not-supported 🚫 is independent of any row data (mapping wins)" , ( ) => {
10071010 // Even if a stray row existed, an unmapped column must still render the
1008- // not-supported state — the caller passes row=null for unmapped columns,
1011+ // not-supported 🚫 state — the caller passes row=null for unmapped columns,
10091012 // but assert buildStarterBadge ignores row entirely when !isSupported.
10101013 const b = buildStarterBadge (
10111014 "health" ,
@@ -1014,8 +1017,24 @@ describe("buildStarterBadge — 5-state cell vocabulary (§d)", () => {
10141017 NOW ,
10151018 "live" ,
10161019 ) ;
1020+ expect ( b . label ) . toBe ( "🚫" ) ;
1021+ expect ( b . tone ) . not . toBe ( "red" ) ;
1022+ } ) ;
1023+
1024+ it ( "supported column with a genuinely-red row still renders red ✗ (NOT masked as 🚫)" , ( ) => {
1025+ // Guard the inverse: only ABSENT starters become 🚫. A starter that exists
1026+ // and FAILED must keep surfacing its real red ✗ — never reframed as
1027+ // "unsupported".
1028+ const b = buildStarterBadge (
1029+ "chat" ,
1030+ true ,
1031+ row ( "starter:agno/chat" , "starter" , "red" ) ,
1032+ NOW ,
1033+ "live" ,
1034+ ) ;
1035+ expect ( b . tone ) . toBe ( "red" ) ;
10171036 expect ( b . label ) . toBe ( "✗" ) ;
1018- expect ( b . tone ) . toBe ( "gray " ) ;
1037+ expect ( b . label ) . not . toBe ( "🚫 " ) ;
10191038 } ) ;
10201039
10211040 it ( "tooltip carries the per-level descriptor for data-bearing states" , ( ) => {
0 commit comments