<label> is rendering properly now, but some parent <span> elements are added to the rendered markup which means we still can't reliably use the label/labelPosition inside an h:panelGrid due to column counting. Although when panelGrid is processed in the rendering lifecycle I don't know if we'll ever be able to properly use the label approach.
Ideally we want to be able to say:
<h:panelGrid columns="3">
<ace:someComp id="test" label="Test"/>
<ace:message for="test"/>
</h:panelGrid>
And have it render out as 3 distinct columns, the first being <label>, the second our component, and the third an error message.
Meanwhile for the span wrapping issue this JSF code...
<h:panelGrid columns="2">
<ace:textEntry id="itemNIn" value="#
{postBean.toAdd.name}
"
required="true" maxlength="20"
autocapitalize="true" autocorrect="true"
placeholder="Enter item name"
requiredIndicator="*"
validator="UniqueItemNameValidator"
label="Item Name:" labelPosition="left">
<f:validateLength minimum="3" maximum="20"/>
</ace:textEntry>
<ace:message for="itemNIn"/>
</h:panelGrid>
Renders to this HTML...
<table>
<tbody>
<tr>
<td>
<span id="p:itemNIn">
<span>
<label id="label_p:itemNIn" for="p:itemNIn_input" class="ui-input-label ui-input-label-left">Item Name:</label><input type="text" value="Brocolli" role="textbox" placeholder="Enter item name" onfocus="ice.ace.lazy('TextEntry',['p:itemNIn',{'autoTab':false,'secret':false,'originalType':'text','indicatorPosition':'right','labelPosition':'left','immediate':false,'behaviors':{'change':
{'source':'p:itemNIn','execute':'p:itemNIn','render':'p','event':'valueChange'}
}}]);" name="p:itemNIn_input" maxlength="20" id="p:itemNIn_input" data-elementupdate="p:itemNIn" class="ui-inputfield ui-textentry ui-widget ui-state-default ui-corner-all ui-state-required" autocorrect="true" autocapitalize="true" aria-required="true" aria-labelledby="label_p:itemNIn"><span class="ui-required-indicator ui-required-indicator-right">*</span></span>
</span>
</td>
<td>
NEXT CONTENT
</td>
</tr>
</tbody>
</table>
The important part being the <span id="p:itemNIn"> and basic <span> wrapping the label and input.
Need to assess the implications of this in terms of potential backwards compatibility and ARIA/accessibility concerns.