[hotfix][go] harden NewCell creation checks
diff --git a/statefun-sdk-go/v3/pkg/statefun/internal/cell.go b/statefun-sdk-go/v3/pkg/statefun/internal/cell.go
index f3479c8..16f7e42 100644
--- a/statefun-sdk-go/v3/pkg/statefun/internal/cell.go
+++ b/statefun-sdk-go/v3/pkg/statefun/internal/cell.go
@@ -43,7 +43,7 @@
 		typeTypeName: typeTypeName,
 	}
 
-	if state.StateValue != nil {
+	if state.StateValue != nil && state.StateValue.HasValue {
 		c.hasValue = true
 		c.buf = state.StateValue.Value
 	}
diff --git a/statefun-sdk-go/v3/pkg/statefun/internal/cell_test.go b/statefun-sdk-go/v3/pkg/statefun/internal/cell_test.go
index 198c74a..d59096e 100644
--- a/statefun-sdk-go/v3/pkg/statefun/internal/cell_test.go
+++ b/statefun-sdk-go/v3/pkg/statefun/internal/cell_test.go
@@ -23,6 +23,39 @@
 	"testing"
 )
 
+func TestNewCell(t *testing.T) {
+	cell := NewCell(&protocol.ToFunction_PersistedValue{
+		StateName: "state",
+	}, "typename")
+
+	assert.False(t, cell.HasValue(), "cell should not have a value")
+	assert.Equal(t, cell.typeTypeName, "typename")
+
+	cell = NewCell(&protocol.ToFunction_PersistedValue{
+		StateName: "state",
+		StateValue: &protocol.TypedValue{
+			Typename: "blah",
+			HasValue: false,
+			Value:    []byte{1, 1, 1, 1},
+		},
+	}, "typename")
+
+	assert.False(t, cell.HasValue(), "cell should not have a value")
+	assert.Equal(t, cell.typeTypeName, "typename")
+
+	cell = NewCell(&protocol.ToFunction_PersistedValue{
+		StateName: "state",
+		StateValue: &protocol.TypedValue{
+			Typename: "blah",
+			HasValue: true,
+			Value:    []byte{1, 1, 1, 1},
+		},
+	}, "typename")
+
+	assert.True(t, cell.HasValue(), "cell should have a value")
+	assert.Equal(t, cell.typeTypeName, "typename")
+}
+
 func TestCellReadWrite(t *testing.T) {
 	cell := NewCell(&protocol.ToFunction_PersistedValue{
 		StateName: "state",