Comme quoi il n’y a pas de réponse unique.
De mon côté, je dirais que cela dépend de ta valeur par défaut. Souvent (mais c’est language-specific) un nouvel attribut d’objet, de modèle, de ce que tu veux est initialisé naturellement à null (ou nil, ou undefined etc.) bref à une valeur falsy. Donc utilise un attribut pour que la valeur par défaut soit falsy.
Du coup, plutôt que de devoir gérer une valeur par défaut à la création (eg. visible=true, status='visible' etc.) tu peux te contenter d’ajouter le critère et de ne l’initialiser que pour les objets dont la valeur n’est pas celle par défaut.
En outre, je trouve que cela a du sens au niveau entropique : lorsque tu as une valeur par défaut (ex: hidden=false quelque part), c’est normal que ton programme se comporte de la même manière pour :
{
  id: 1,
  name: 'My object',
  param: {}
}
et
{
  id: 1,
  name: 'My object',
  hidden: false,
  param: {}
}
Donc si les objets sont visibles par défaut (ce que j’imagine dans ton cas), j’utiliserais hidden, en revanche si c’est un article et qu’il n’est pas forcément prêt par défaut, j’utiliserais published et non draft.