ng-value expects AngularJS expression to which ngModel will be be set when the radio is selected.
And expressions being case-sensitive, if you set ng-value="true" it sets your what you have in ng-model to true, but if you have ng-value="TRUE", it tries to get $scope.TRUE which it doesn't find and your ng-model gets set to null.
Here's an example.
angular.module('radioExample', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.TRUE = "something totally different"
$scope.specialValue = {
"id": "12345",
"value": "green"
};
}]);
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example - example-radio-input-directive-production</title>
<script src="//code.angularjs.org/snapshot/angular.min.js"></script>
</head>
<body ng-app="radioExample">
<form name="myForm" ng-controller="ExampleController">
<label>
<input type="radio" ng-model="color.name" ng-value="specialValue">
SpecialValue
</label><br/>
<label>
<input type="radio" ng-model="color.name" ng-value="true">
true
</label><br/>
<label>
<input type="radio" ng-model="color.name" ng-value="TRUE">
TRUE
</label><br/><br/>
<tt>color = {{color.name | json}}</tt><br/>
</form>
<br><br/><br/> Note that `ng-value="specialValue"` sets radio item's value to be the value of `$scope.specialValue`.
</body>
</html>