Skip to content

Billing product list fails on date format returned #34082

Description

@teeyenng

This is autogenerated. Please review and update as needed.

Describe the bug

Command Name
az billing product list

Errors:

PS /home/USER> az billing product list --account-name "ACCOUNT_NAME" --profile-name "PROFILE_NAME"
Command group 'billing product' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
The command failed with an unexpected error. Here is the traceback:
('Unable to deserialize response data. Data: [{\'id\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/products/PRODUCT_1\', \'name\': \'PRODUCT_1\', \'properties\': {\'autoRenew\': \'On\', \'availabilityId\': \'REDACTED\', \'billingProfileId\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/billingProfiles/PROFILE_NAME\', \'billingProfileDisplayName\': \'Direct\', \'endDate\': \'10/01/2026\', \'invoiceSectionId\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/billingProfiles/PROFILE_NAME/invoiceSections/INVOICE_SECTION\', \'invoiceSectionDisplayName\': \'DISPLAY_NAME\', \'productType\': \'PRODUCTPRODUCT\', \'productTypeId\': \'REDACTED\', \'skuId\': \'0001\', \'skuDescription\': \'PRODUCTPRODUCT\', \'purchaseDate\': \'12/02/2024\', \'quantity\': REDACTED, \'status\': \'AutoRenew\', \'tenantId\': \'TENANT_ID\'}, \'type\': \'Microsoft.Billing/billingAccounts/products\'}, {\'id\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/products/PRODUCT_2\', \'name\': \'PRODUCT_2\', \'properties\': {\'autoRenew\': \'On\', \'availabilityId\': \'REDACTED\', \'billingFrequency\': \'P1M\', \'billingProfileId\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/billingProfiles/PROFILE_NAME\', \'billingProfileDisplayName\': \'Direct\', \'endDate\': \'06/12/2027\', \'invoiceSectionId\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/billingProfiles/PROFILE_NAME/invoiceSections/INVOICE_SECTION\', \'invoiceSectionDisplayName\': \'DISPLAY_NAME\', \'productType\': \'PRODUCTPRODUCT\', \'productTypeId\': \'REDACTED\', \'skuId\': \'0001\', \'skuDescription\': \'PRODUCTPRODUCT\', \'purchaseDate\': \'09/17/2025\', \'quantity\': 999, \'status\': \'AutoRenew\', \'tenantId\': \'TENANT_ID\'}, \'type\': \'Microsoft.Billing/billingAccounts/products\'}, {\'id\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/products/PRODUCT_3\', \'name\': \'PRODUCT_3\', \'properties\': {\'autoRenew\': \'On\', \'availabilityId\': \'REDACTED\', \'billingProfileId\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/billingProfiles/PROFILE_NAME\', \'billingProfileDisplayName\': \'Direct\', \'endDate\': \'10/12/2026\', \'invoiceSectionId\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/billingProfiles/PROFILE_NAME/invoiceSections/INVOICE_SECTION\', \'invoiceSectionDisplayName\': \'DISPLAY_NAME\', \'productType\': \'PRODUCTPRODUCT\', \'productTypeId\': \'REDACTED\', \'skuId\': \'0001\', \'skuDescription\': \'PRODUCTPRODUCT\', \'purchaseDate\': \'10/13/2025\', \'quantity\': 2, \'status\': \'AutoRenew\', \'tenantId\': \'TENANT_ID\'}, \'type\': \'Microsoft.Billing/billingAccounts/products\'}], [Product], DeserializationError: ("Unable to deserialize response data. Data: 12/02/2024, iso-8601, DeserializationError: (\'Cannot deserialize datetime object., ValueError: Invalid datetime string: 12/02/2024\', ValueError(\'Invalid datetime string: 12/02/2024\'))", DeserializationError(\'Cannot deserialize datetime object., ValueError: Invalid datetime string: 12/02/2024\', ValueError(\'Invalid datetime string: 12/02/2024\')))', DeserializationError("Unable to deserialize response data. Data: 12/02/2024, iso-8601, DeserializationError: ('Cannot deserialize datetime object., ValueError: Invalid datetime string: 12/02/2024', ValueError('Invalid datetime string: 12/02/2024'))", DeserializationError('Cannot deserialize datetime object., ValueError: Invalid datetime string: 12/02/2024', ValueError('Invalid datetime string: 12/02/2024'))))
Traceback (most recent call last):
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1954, in deserialize_iso
    raise ValueError("Invalid datetime string: " + attr)
ValueError: Invalid datetime string: 12/02/2024

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1621, in deserialize_data
    data_val = self.deserialize_type[data_type](data)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1973, in deserialize_iso
    raise_with_traceback(DeserializationError, msg, err)
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/exceptions.py", line 51, in raise_with_traceback
    raise error.with_traceback(exc_traceback)
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1954, in deserialize_iso
    raise ValueError("Invalid datetime string: " + attr)
azure.core.exceptions.DeserializationError: ('Cannot deserialize datetime object., ValueError: Invalid datetime string: 12/02/2024', ValueError('Invalid datetime string: 12/02/2024'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1626, in deserialize_data
    return self.deserialize_type[iter_type](data, data_type[1:-1])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1657, in deserialize_iter
    return [self.deserialize_data(a, iter_type) for a in attr]
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1639, in deserialize_data
    return self._deserialize(obj_type, data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1450, in _deserialize
    value = self.deserialize_data(raw_value, attr_desc['type'])
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1637, in deserialize_data
    raise_with_traceback(DeserializationError, msg, err)
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/exceptions.py", line 51, in raise_with_traceback
    raise error.with_traceback(exc_traceback)
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1621, in deserialize_data
    data_val = self.deserialize_type[data_type](data)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1973, in deserialize_iso
    raise_with_traceback(DeserializationError, msg, err)
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/exceptions.py", line 51, in raise_with_traceback
    raise error.with_traceback(exc_traceback)
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1954, in deserialize_iso
    raise ValueError("Invalid datetime string: " + attr)
azure.core.exceptions.DeserializationError: ("Unable to deserialize response data. Data: 12/02/2024, iso-8601, DeserializationError: ('Cannot deserialize datetime object., ValueError: Invalid datetime string: 12/02/2024', ValueError('Invalid datetime string: 12/02/2024'))", DeserializationError('Cannot deserialize datetime object., ValueError: Invalid datetime string: 12/02/2024', ValueError('Invalid datetime string: 12/02/2024')))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib64/az/lib/python3.12/site-packages/knack/cli.py", line 233, in invoke
    cmd_result = self.invocation.execute(args)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/azure/cli/core/commands/__init__.py", line 677, in execute
    raise ex
  File "/usr/lib64/az/lib/python3.12/site-packages/azure/cli/core/commands/__init__.py", line 820, in _run_jobs_serially
    results.append(self._run_job(expanded_arg, cmd_copy))
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/azure/cli/core/commands/__init__.py", line 802, in _run_job
    result = list(result)
             ^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/azure/core/paging.py", line 136, in __next__
    return next(self._page_iterator)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/azure/core/paging.py", line 90, in __next__
    self.continuation_token, self._current_page = self._extract_data(self._response)
                                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/azure/mgmt/billing/operations/_products_operations.py", line 265, in extract_data
    deserialized = self._deserialize('ProductsListResult', pipeline_response)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1376, in __call__
    return self._deserialize(target_obj, data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1450, in _deserialize
    value = self.deserialize_data(raw_value, attr_desc['type'])
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1637, in deserialize_data
    raise_with_traceback(DeserializationError, msg, err)
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/exceptions.py", line 51, in raise_with_traceback
    raise error.with_traceback(exc_traceback)
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1626, in deserialize_data
    return self.deserialize_type[iter_type](data, data_type[1:-1])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1657, in deserialize_iter
    return [self.deserialize_data(a, iter_type) for a in attr]
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1639, in deserialize_data
    return self._deserialize(obj_type, data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1450, in _deserialize
    value = self.deserialize_data(raw_value, attr_desc['type'])
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1637, in deserialize_data
    raise_with_traceback(DeserializationError, msg, err)
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/exceptions.py", line 51, in raise_with_traceback
    raise error.with_traceback(exc_traceback)
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1621, in deserialize_data
    data_val = self.deserialize_type[data_type](data)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1973, in deserialize_iso
    raise_with_traceback(DeserializationError, msg, err)
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/exceptions.py", line 51, in raise_with_traceback
    raise error.with_traceback(exc_traceback)
  File "/usr/lib64/az/lib/python3.12/site-packages/msrest/serialization.py", line 1954, in deserialize_iso
    raise ValueError("Invalid datetime string: " + attr)
azure.core.exceptions.DeserializationError: ('Unable to deserialize response data. Data: [{\'id\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/products/PRODUCT_1\', \'name\': \'PRODUCT_1\', \'properties\': {\'autoRenew\': \'On\', \'availabilityId\': \'REDACTED\', \'billingProfileId\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/billingProfiles/PROFILE_NAME\', \'billingProfileDisplayName\': \'Direct\', \'endDate\': \'10/01/2026\', \'invoiceSectionId\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/billingProfiles/PROFILE_NAME/invoiceSections/INVOICE_SECTION\', \'invoiceSectionDisplayName\': \'DISPLAY_NAME\', \'productType\': \'PRODUCTPRODUCT\', \'productTypeId\': \'REDACTED\', \'skuId\': \'0001\', \'skuDescription\': \'PRODUCTPRODUCT\', \'purchaseDate\': \'12/02/2024\', \'quantity\': 3, \'status\': \'AutoRenew\', \'tenantId\': \'TENANT_ID\'}, \'type\': \'Microsoft.Billing/billingAccounts/products\'}, {\'id\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/products/PRODUCT_2\', \'name\': \'PRODUCT_2\', \'properties\': {\'autoRenew\': \'On\', \'availabilityId\': \'REDACTED\', \'billingFrequency\': \'P1M\', \'billingProfileId\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/billingProfiles/PROFILE_NAME\', \'billingProfileDisplayName\': \'Direct\', \'endDate\': \'06/12/2027\', \'invoiceSectionId\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/billingProfiles/PROFILE_NAME/invoiceSections/INVOICE_SECTION\', \'invoiceSectionDisplayName\': \'DISPLAY_NAME\', \'productType\': \'PRODUCTPRODUCT\', \'productTypeId\': \'REDACTED\', \'skuId\': \'0001\', \'skuDescription\': \'PRODUCTPRODUCT\', \'purchaseDate\': \'09/17/2025\', \'quantity\': 7, \'status\': \'AutoRenew\', \'tenantId\': \'TENANT_ID\'}, \'type\': \'Microsoft.Billing/billingAccounts/products\'}, {\'id\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/products/PRODUCT_3\', \'name\': \'PRODUCT_3\', \'properties\': {\'autoRenew\': \'On\', \'availabilityId\': \'REDACTED\', \'billingProfileId\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/billingProfiles/PROFILE_NAME\', \'billingProfileDisplayName\': \'Direct\', \'endDate\': \'10/12/2026\', \'invoiceSectionId\': \'/providers/Microsoft.Billing/billingAccounts/ACCOUNT_NAME/billingProfiles/PROFILE_NAME/invoiceSections/INVOICE_SECTION\', \'invoiceSectionDisplayName\': \'DISPLAY_NAME\', \'productType\': \'PRODUCTPRODUCT\', \'productTypeId\': \'REDACTED\', \'skuId\': \'0001\', \'skuDescription\': \'PRODUCTPRODUCT\', \'purchaseDate\': \'10/13/2025\', \'quantity\': 2, \'status\': \'AutoRenew\', \'tenantId\': \'TENANT_ID\'}, \'type\': \'Microsoft.Billing/billingAccounts/products\'}], [Product], DeserializationError: ("Unable to deserialize response data. Data: 12/02/2024, iso-8601, DeserializationError: (\'Cannot deserialize datetime object., ValueError: Invalid datetime string: 12/02/2024\', ValueError(\'Invalid datetime string: 12/02/2024\'))", DeserializationError(\'Cannot deserialize datetime object., ValueError: Invalid datetime string: 12/02/2024\', ValueError(\'Invalid datetime string: 12/02/2024\')))', DeserializationError("Unable to deserialize response data. Data: 12/02/2024, iso-8601, DeserializationError: ('Cannot deserialize datetime object., ValueError: Invalid datetime string: 12/02/2024', ValueError('Invalid datetime string: 12/02/2024'))", DeserializationError('Cannot deserialize datetime object., ValueError: Invalid datetime string: 12/02/2024', ValueError('Invalid datetime string: 12/02/2024'))))
To check existing issues, please visit: https://github.com/Azure/azure-cli/issues

To Reproduce:

Steps to reproduce the behavior. Note that argument values have been redacted, as they may contain sensitive information.

  • az billing product list --account-name {} --profile-name {}

Expected Behavior

List all the products under the billing account and profile

Environment Summary

Linux-6.1.158.2-microsoft-standard-x86_64-with-glibc2.38 (Cloud Shell), Microsoft Azure Linux 3.0
Python 3.12.14
Installer: RPM

azure-cli 2.90.0

Extensions:
ml 2.44.1
ssh 2.0.9

Dependencies:
msal 1.36.0
azure-mgmt-resource 24.0.0

Additional Context

Activity

  1. yonzhan commented on Sep 15, 2026

    @yonzhan
    Collaborator

    Thank you for opening this issue, we will look into it.

  2. x-engineering-agent commented on Sep 16, 2026

    @x-engineering-agent
    Contributor

    Bug Analysis

    Affected CLI module: billing, in src/azure-cli/azure/cli/command_modules/billing/.
    Target repository / branch: Azure/azure-cli / dev.
    Use this EXACT PR title: [Billing] Fix #34082: az billing product list: Handle non-ISO product dates

    Reproducer and expected result

    The report is sufficiently specified; no additional customer information is needed to begin a regression-driven fix. Its discussion contains an acknowledgement and no prior requirements request or bug analysis.

    • Reported environment: Azure CLI 2.90.0, Python 3.12.14, RPM installation in Cloud Shell on Microsoft Azure Linux 3.0.
    • Failing command: az billing product list --account-name <billing-account> --profile-name <billing-profile>.
    • The service returns Product properties including purchaseDate: "12/02/2024" and endDate: "10/01/2026". Other reported purchase dates include 09/17/2025 and 10/13/2025, supporting month/day/year rather than locale-dependent day/month interpretation.
    • Actual behavior: materializing the paged result fails in ProductsOperations.extract_data, while deserializing ProductsListResult / Product, with azure.core.exceptions.DeserializationError and ValueError: Invalid datetime string: 12/02/2024 from msrest.serialization.deserialize_iso.
    • Expected behavior: list all products in the requested billing account/profile without a traceback, preserving their fields and normal CLI JSON output. This is a response-deserialization failure, not invalid command arguments or merely display formatting.

    Grounded source context

    Inspected upstream dev at 79fa755; verify against the implementation job's pinned base before changing anything.

    1. src/azure-cli/setup.py (line 75) pins azure-mgmt-billing==6.0.0.
    2. billing/generated/commands.py (lines 97-106) registers billing product list as billing_product_list with ProductsOperations and cf_product. generated/_client_factory.py:51-52 returns BillingManagementClient.products.
    3. billing/generated/custom.py (lines 310-329) selects client.list_by_billing_profile(...) for the exact reported arguments. It returns the SDK pager unchanged. Other branches select invoice-section, customer, or billing-account scope. The traceback shows the exception occurs later, when CLI consumes that pager, before a usable Product model exists.
    4. The inspected product path is legacy AutoRest/SDK-backed, not the separate AAZ billing-period path. billing/custom.py imports generated.custom before manual.custom; billing/__init__.py:42-45 loads generated registrations before manual.commands. These are existing handwritten override points. billing/manual/custom.py and manual/commands.py already contain scoped Billing overrides.
    5. test_billing_scenario_incrementalGenerated.py (lines 631-655) has account/profile/invoice-section product-list examples with empty checks. That generated smoke coverage does not establish handling of the reported response payload. Handwritten scenario coverage also exists in tests/latest/test_billing_commands.py.

    Focused implementation requirements

    • Fix the product-list response compatibility boundary, not the shared msrest ISO parser. Confirm the pinned SDK's Product date mappings and supported transport/deserialization hooks. Prefer a narrowly scoped handwritten compatibility adapter through billing/manual/custom.py and, only if necessary, manual/commands.py or another handwritten module-local helper.
    • The adapter must handle the reported date representation before Product deserialization on every page. A post-deserialization output transform, or a try/except covering only pager construction, cannot fix the observed lazy-iteration failure. Preserve standard ISO-8601 timestamps and missing/null optional fields. If normalizing slash dates, use strict calendar-valid month/day/year semantics only for the affected Product date fields; avoid machine-locale guessing, whole-response string replacement, and invented timezone shifts.
    • Preserve account/profile/invoice-section/customer routing, filters, request parameters, next-link traversal, ordinary CLI field names and output shape. Do not silently discard products or swallow malformed payloads, service failures, or continuation-page errors. Do not change update/move operations, status/auto-renew transitions, global SDK model attribute maps, or other modules' deserializers as a side effect.
    • Do not hand-edit generated/, SDK-generated models/operations, aaz/, generated scenario files, or generation archives. If the correct fix instead changes the API schema or generated SDK/AAZ model, change its approved durable source and execute the owning regeneration/release workflow. Report an unavailable source/generator/dependency as a blocker rather than fabricating generated output or broadening this into an unrelated migration. The handwritten override route must remain clearly distinct from generated artifacts.

    Required regression and scenario coverage

    Add focused handwritten tests under billing/tests/latest/, using the repository's existing test infrastructure:

    1. Drive a realistic mocked HTTP response through the pinned Billing SDK's real ProductsListResult / Product deserialization and consume its actual pager. Reproduce the reported failure with purchaseDate=12/02/2024 and slash-form endDate, then prove the command returns complete, JSON-serializable products after the fix. Do not mock away the deserializer or prove only that arguments were forwarded.
    2. Cover mixed ISO-8601 timestamps (including offsets/fractional seconds), reported month/day dates including unambiguous 09/17/2025, null/missing dates, empty product lists, invalid dates, and unchanged unrelated Product fields. Assert calendar dates and output representation explicitly, including the month/day choice for 12/02/2024.
    3. Use at least two pages: a valid first page and a continuation page containing the original offending date. Assert every product appears once, continuation handling terminates correctly, and failure on a later page is not converted into a misleading successful partial list. Include relevant HTTP/service-error propagation.
    4. Exercise the actual command/profile branch and verify account, invoice-section, and customer routing/filter semantics are not regressed by shared adaptation. Include an unaffected Billing path to detect global serializer/model mutations. Use synthetic identifiers and reusable sanitized fixtures, never customer values.
    5. Run focused existing azdev style, azdev linter, and Billing tests during implementation. A live Billing scenario, when authorized fixtures and credentials are available, uses azdev test billing --live --series; deterministic transport/deserialization regression coverage remains required even when live credentials are unavailable. Record the actual validation results and any live-environment limitation.

    Dispatch boundary: This analysis authorizes a durable Foundry implementation assignment only. No implementation, local project tests, CI/workflow dispatch, approval, or merge was performed during this triage.

    Mandatory Codegen execution protocol

    Before editing implementation files, determine whether the affected billing command is AAZ-generated. Files under aaz/<profile>/ are generated output and must never be patched directly, including by an AI agent. Check out Azure/aaz beside Azure/azure-rest-api-specs, Azure/aaz-dev-tools, and the downstream repository. API-schema defects start in the specification; command naming, grouping, arguments, API-version selection, help, and examples belong in the durable Azure/aaz command model; non-modelable client behavior belongs in a handwritten subclass or wrapper in custom.py, registered from commands.py. X Engineering Agent creates and promotes the corresponding durable Azure/aaz source pull request before it promotes downstream generated output.

    Follow the Azure CLI repository's Codegen workflow and the aaz-dev setup documentation. Set up the checked-out repositories with azdev setup. Use generate only when importing or redesigning command models from Swagger/TypeSpec. For an existing module whose durable Azure/aaz model has been updated, render that model with regenerate:

    aaz-dev cli regenerate --name billing --cli-path <azure-cli>
    
    # New/imported command model only:
    aaz-dev cli generate --spec <specification-name> --module billing

    You MUST actually run the generator; do not merely describe it or imitate its output. If the AAZ/specification checkout, local source change, credentials, or generator is unavailable, stop and report the blocker instead of editing generated files. Inspect _aaz_info provenance and the complete regenerated diff, then run focused azdev style, azdev linter, and azdev test validation. For an extension, also update its version and HISTORY.rst, preserve azext_metadata.json compatibility, and let release automation update src/index.json.

    PR title & description format (required)

    This repo enforces a PR format (guide). Please author the PR exactly as follows or CI's Check the Format of Pull Request Title and Content will fail.

    Use this EXACT PR title (copy verbatim, do not reword):

    [Billing] Fix #34082: `az billing product list`: Handle non-ISO product dates
    

    Keep the backticks around the command and the Fix #34082: prefix. You may only adjust the wording after the command (the final summary) if the fix changes; the [Billing] prefix, issue link, and backticked command must stay.

    Description — follow the PR template and fill in:

    • Link the issue — start the Description with a closing keyword so the PR auto-links and closes it: Fixes #34082.
    • Related command — the az ... command this affects.
    • Description (mandatory) — why the bug happens, what you changed, and the resulting behavior.
    • Testing Guide — example command(s) showing the fix works.
    • History Notes — leave the title to drive the history note, or add extra lines in the same format (component in brackets + the command in backticks), e.g. [Billing] `az <command>`: <note>.
    • Keep the template checklist and tick the items you've satisfied.
  3. x-engineering-agent commented on Sep 16, 2026

    @x-engineering-agent
    Contributor

    Automated processing requires maintainer follow-up for this request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Billingaz billingService AttentionThis issue is responsible by Azure service team.customer-reportedIssues that are reported by GitHub users external to the Azure organization.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions