TL/DR Version: Reporting Services is not giving you the correct RDL.
Your question prompted me to further investigate a suspicion I already had on SSRS for quite some time: report parameters can behave in unexpected ways for report developers when deploying (or downloading) report definitions. One related scenario I had noted before:
- Create a report with parameters.
- Deploy the report for the first time.
- Update the report parameters in some way.
- Deploy the same report once more.
- Result: parameter settings are not succesfully updated on the server.
- Delete the report from the report manager.
- Deploy the report once more (effectively the same as step 2).
- Result: Report parameters are updated correctly.
In short, if you want to update parameter settings for deployed reports you'll first need to delete it and then deploy it, or update the settings directly via the report manager.
Back to your question(s). You're not missing anything, this just seems the way SSRS is behaving (intended or not). The RDL schema has this (abbreviated) piece:
<xsd:complexType name="ReportParameterType">
<xsd:choice minOccurs="1" maxOccurs="unbounded">
<xsd:element name="DataType">
<!-- abbreviated -->
</xsd:element>
<xsd:element name="Nullable" type="xsd:boolean" minOccurs="0"/>
<xsd:element name="DefaultValue" type="DefaultValueType" minOccurs="0"/>
<xsd:element name="AllowBlank" type="xsd:boolean" minOccurs="0"/>
<xsd:element name="Prompt" type="xsd:string" minOccurs="0"/>
<xsd:element name="ValidValues" type="ValidValuesType" minOccurs="0"/>
<xsd:element name="Hidden" type="xsd:boolean" minOccurs="0"/>
<xsd:element name="MultiValue" type="xsd:boolean" minOccurs="0"/>
<xsd:element name="UsedInQuery" minOccurs="0">
</xsd:choice>
<xsd:attribute name="Name" type="xsd:normalizedString" use="required"/>
</xsd:complexType>
So, there should be a "Hidden" element for your ReportParameter.
I just verified your findings (in SSRS 2008), and think I may have the answer to your second question: SSRS is indeed not coughing up the correct version of the RDL. It's missing various bits about the parameters, including the element on being hidden or not.
Funny thing is: if you change the report in BIDS and set the parameter to hidden, the RDL will be changed and have the <Hidden>true</Hidden>
element.