exit=1
--- stdout
fetch pets@v1: fetched
fetch pets@v2: fetched
fetch shop@<upstream head:12>: fetched
fetch config@v1: fetched, 1 external $ref stubbed
fetch broken@v1: fetched
run 4 schemas x (recommendation + 8 grid configurations)
regret: pets 0, shop 0, config 0, broken None; threshold proposals: 3; preset proposals: 0; upstream heads to rotate: 3 of 4; failed: broken
wrote report.md, scores.json, calibration.json, rules.diff

--- stderr

--- calibration.json
{
  "calibrated_presets": "20261017",
  "format_version": 1,
  "grid": {
    "configurations": 8,
    "decisions": [
      "naming-strategy",
      "enum-shape",
      "title-source"
    ]
  },
  "rules_revision": "2026-10-18",
  "schemas": {
    "config": {
      "best": {
        "arguments": [
          "--enum-field-as-literal",
          "all"
        ],
        "median_length": 12,
        "preset": "standard-py310-20261017",
        "problems": 0
      },
      "diff_against": null,
      "recommended": {
        "arguments": [
          "--naming-strategy",
          "full-path",
          "--preset",
          "standard-py310-20261017"
        ],
        "median_length": 17,
        "problems": 0
      },
      "ref": "v1",
      "regret": 0,
      "rules": [
        "naming.qualify-shared-inline-names"
      ]
    },
    "pets": {
      "best": {
        "arguments": [
          "--naming-strategy",
          "full-path",
          "--enum-field-as-literal",
          "all"
        ],
        "median_length": 5,
        "preset": "standard-py310-20261017",
        "problems": 0
      },
      "diff_against": "v1",
      "recommended": {
        "arguments": [
          "--naming-strategy",
          "full-path",
          "--preset",
          "standard-py310-20261017"
        ],
        "median_length": 9,
        "problems": 0
      },
      "ref": "v2",
      "regret": 0,
      "rules": [
        "naming.qualify-shared-inline-names"
      ]
    },
    "shop": {
      "best": {
        "arguments": [
          "--enum-field-as-literal",
          "all"
        ],
        "median_length": 4,
        "preset": "standard-py310-20261017",
        "problems": 0
      },
      "diff_against": null,
      "recommended": {
        "arguments": [
          "--naming-strategy",
          "full-path",
          "--preset",
          "standard-py310-20261017"
        ],
        "median_length": 11,
        "problems": 0
      },
      "ref": "<upstream head>",
      "regret": 0,
      "rules": [
        "naming.qualify-shared-inline-names"
      ]
    }
  },
  "settings": {
    "output_model_type": "pydantic_v2.BaseModel",
    "preset": "standard-py310-20261017",
    "target_python_version": "3.10"
  }
}

--- report.md
# Recommender calibration

- Rules: revision 2026-10-18, calibrated on 20261017 presets
- Settings: pydantic_v2.BaseModel, target Python 3.10
- Grid: 8 configurations over naming-strategy, enum-shape, title-source, each on top of standard-py310-20261017
- Schemas: 4 (2 calibration, 2 holdout)

## Schemas

Problems and median: problem names and median class-name length of the configuration the --recommend-options trial selects and of the grid's best one. Grid configurations are ranked like the trial ranks candidates: numbered and doubled names, other problem names, renamed locations, median length, then fewer options. Regret: the recommendation's problem names minus the best grid configuration's.

| Schema | Role | Version | Rules fired | Problems | Median | Grid best | Problems | Median | Regret |
|---|---|---|---|---|---|---|---|---|---|
| pets | calibration | v2 (diff against v1) | naming.qualify-shared-inline-names | 0 | 9 | `--naming-strategy full-path --enum-field-as-literal all` | 0 | 5 | 0 |
| shop | calibration | <upstream head:12> | naming.qualify-shared-inline-names | 0 | 11 | `--enum-field-as-literal all` | 0 | 4 | 0 |
| config | holdout | v1 | naming.qualify-shared-inline-names | 0 | 17 | `--enum-field-as-literal all` | 0 | 12 | 0 |
| broken | holdout | v1 | failed | - | - | - | - | - | - |

## Rules against the grid

A rule should fire on a schema when the grid's best configuration with its values beats the best one without them. Neutral: a tie, or one side has no valid configuration.

| Rule | Decision | Fires on | Disagrees (calibration) | Disagrees (holdout) | Neutral |
|---|---|---|---|---|---|
| titles.keys-when-titles-collide | title-source | - | shop | - | pets, config |
| titles.names-from-unique-titles | title-source | - | - | - | pets, config |
| naming.qualify-shared-inline-names | naming-strategy | pets, shop, config | shop | config | - |
| enums.inline-value-sets-as-literal | enum-shape | - | pets, shop | config | - |

- Not covered: reuse.identical-inline-shapes (decision reuse has no grid axis)
- Not covered: root.class-name-for-root-object (decision root-name has no grid axis)
- Not covered: dotted-keys.flat-when-namespaces-cycle (decision dotted-keys has no grid axis)
- Not covered: unions.name-variants-after-tags (decision union-variant-names has no grid axis)
- Optional, not calibrated: validation.check-unique-items-and-pattern-properties (listed for the user to decide, never in the command)
- Optional, not calibrated: policy.strict-scalar-types (listed for the user to decide, never in the command)

Rules that disagree on 2 or more schemas:

- naming.qualify-shared-inline-names: config, shop
- enums.inline-value-sets-as-literal: config, pets, shop

## Threshold proposals

One leaf per rule: the observed signal value that removes most calibration disagreements without adding holdout ones. See rules.diff.

| Rule | Leaf | Proposed | Calibration disagreements | Holdout disagreements |
|---|---|---|---|---|
| titles.keys-when-titles-collide | `component_title_duplicate_groups >= 3` | 1 | 1 -> 0 | 0 -> 0 |
| naming.qualify-shared-inline-names | `shared_inline_names >= 1` | 2 | 1 -> 0 | 1 -> 0 |
| enums.inline-value-sets-as-literal | `inline_enums >= 5` | 2 | 2 -> 0 | 1 -> 0 |

## Preset proposals

A value is proposed for a new dated preset when it wins on at least 70% of the calibration and of the holdout schemas, loses none by more than 2 problem names and generates and imports on every schema of the run as the latest preset with only that value changed. Wins compare the best grid configuration with the value against the best one without it by the trial's ranking; losses show the extra problem names (+0: lost on another ranking metric).

| Value | Calibration wins | Holdout wins | Losses | Status |
|---|---|---|---|---|
| `naming_strategy="full-path"` | 1/2 | 0/1 | config +0, shop +0 | not proposed |
| `enum_field_as_literal="all"` | 2/2 | 1/1 | - | not proposed: not import-checked on broken |
| `use_title_as_name=true` | 0/2 | 0/1 | shop +2 | not proposed |

## Import check

| Schema | Configurations | Arguments | Result |
|---|---|---|---|
| pets | recommended | `--input-file-type openapi --naming-strategy full-path --output-model-type pydantic_v2.BaseModel --preset standard-py310-20261017 --target-python-version 3.10` | ok |
| pets | grid best | `--input-file-type openapi --output-model-type pydantic_v2.BaseModel --target-python-version 3.10 --preset standard-py310-20261017 --naming-strategy full-path --enum-field-as-literal all` | ok |
| pets | preset + enum_field_as_literal="all" | `--input-file-type openapi --output-model-type pydantic_v2.BaseModel --target-python-version 3.10 --preset standard-py310-20261017 --enum-field-as-literal all` | ok |
| shop | recommended | `--input-file-type openapi --naming-strategy full-path --output-model-type pydantic_v2.BaseModel --preset standard-py310-20261017 --target-python-version 3.10` | ok |
| shop | grid best, preset + enum_field_as_literal="all" | `--input-file-type openapi --output-model-type pydantic_v2.BaseModel --target-python-version 3.10 --preset standard-py310-20261017 --enum-field-as-literal all` | ok |
| config | recommended | `--input-file-type jsonschema --naming-strategy full-path --output-model-type pydantic_v2.BaseModel --preset standard-py310-20261017 --target-python-version 3.10` | ok |
| config | grid best, preset + enum_field_as_literal="all" | `--input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --target-python-version 3.10 --preset standard-py310-20261017 --enum-field-as-literal all` | ok |

## Proposed rotation

Schemas whose source repository's HEAD (git ls-remote) is not the newest pinned ref. Rotating pins the head with its date and sha256 as the newest version, and the version pinned before becomes the baseline; nothing was downloaded.

| Schema | Newest pinned | Upstream head |
|---|---|---|
| pets | v2 (2026-02-01) | <upstream head:12> |
| config | v1 (2026-01-20) | <upstream head:12> |
| broken | v1 (2026-01-25) | not checked: no HEAD reported |

## Failures

- broken: Unable to read the input as a JSON Schema document: Expected dict, got list

## Changes since the last calibration

- calibrated_presets 20261015 -> 20261017
- rules_revision 2026-10-15 -> 2026-10-18
- settings.preset None -> standard-py310-20261017
- settings.target_python_version 3.14 -> 3.10
- config: new
- legacy: not in this run
- pets: best.arguments [--enum-field-as-literal all] -> [--naming-strategy full-path --enum-field-as-literal all]; best.median_length 11 -> 5; best.preset None -> standard-py310-20261017; best.problems 3 -> 0; recommended.arguments [] -> [--naming-strategy full-path --preset standard-py310-20261017]; recommended.median_length 12 -> 9; recommended.problems 5 -> 0; regret 2 -> 0; rules [enums.inline-value-sets-as-literal] -> [naming.qualify-shared-inline-names]
- shop: best.preset None -> standard-py310-20261017; recommended.arguments [--naming-strategy full-path] -> [--naming-strategy full-path --preset standard-py310-20261017]; ref v1 -> <upstream head>

--- rules.diff
--- a/src/datamodel_code_generator/resources/recommender_rules.json
+++ b/src/datamodel_code_generator/resources/recommender_rules.json
@@ -16,7 +16,7 @@
           {
             "signal": "component_title_duplicate_groups",
             "op": ">=",
-            "value": 3
+            "value": 1
           },
           {
             "signal": "component_titles_equal_other_key",
@@ -106,7 +106,7 @@
           {
             "signal": "shared_inline_names",
             "op": ">=",
-            "value": 1
+            "value": 2
           },
           {
             "signal": "inline_names_equal_component",
@@ -143,7 +143,7 @@
           {
             "signal": "inline_enums",
             "op": ">=",
-            "value": 5
+            "value": 2
           },
           {
             "ratio": [

--- scores.json
{
  "calibration": {
    "calibrated_presets": "20261017",
    "format_version": 1,
    "grid": {
      "configurations": 8,
      "decisions": [
        "naming-strategy",
        "enum-shape",
        "title-source"
      ]
    },
    "rules_revision": "2026-10-18",
    "schemas": {
      "config": {
        "best": {
          "arguments": [
            "--enum-field-as-literal",
            "all"
          ],
          "median_length": 12,
          "preset": "standard-py310-20261017",
          "problems": 0
        },
        "diff_against": null,
        "recommended": {
          "arguments": [
            "--naming-strategy",
            "full-path",
            "--preset",
            "standard-py310-20261017"
          ],
          "median_length": 17,
          "problems": 0
        },
        "ref": "v1",
        "regret": 0,
        "rules": [
          "naming.qualify-shared-inline-names"
        ]
      },
      "pets": {
        "best": {
          "arguments": [
            "--naming-strategy",
            "full-path",
            "--enum-field-as-literal",
            "all"
          ],
          "median_length": 5,
          "preset": "standard-py310-20261017",
          "problems": 0
        },
        "diff_against": "v1",
        "recommended": {
          "arguments": [
            "--naming-strategy",
            "full-path",
            "--preset",
            "standard-py310-20261017"
          ],
          "median_length": 9,
          "problems": 0
        },
        "ref": "v2",
        "regret": 0,
        "rules": [
          "naming.qualify-shared-inline-names"
        ]
      },
      "shop": {
        "best": {
          "arguments": [
            "--enum-field-as-literal",
            "all"
          ],
          "median_length": 4,
          "preset": "standard-py310-20261017",
          "problems": 0
        },
        "diff_against": null,
        "recommended": {
          "arguments": [
            "--naming-strategy",
            "full-path",
            "--preset",
            "standard-py310-20261017"
          ],
          "median_length": 11,
          "problems": 0
        },
        "ref": "<upstream head>",
        "regret": 0,
        "rules": [
          "naming.qualify-shared-inline-names"
        ]
      }
    },
    "settings": {
      "output_model_type": "pydantic_v2.BaseModel",
      "preset": "standard-py310-20261017",
      "target_python_version": "3.10"
    }
  },
  "grid": [
    {
      "enum_field_as_literal": "one",
      "use_title_as_name": false
    },
    {
      "enum_field_as_literal": "one",
      "use_title_as_name": true
    },
    {
      "enum_field_as_literal": "all",
      "use_title_as_name": false
    },
    {
      "enum_field_as_literal": "all",
      "use_title_as_name": true
    },
    {
      "enum_field_as_literal": "one",
      "naming_strategy": "full-path",
      "use_title_as_name": false
    },
    {
      "enum_field_as_literal": "one",
      "naming_strategy": "full-path",
      "use_title_as_name": true
    },
    {
      "enum_field_as_literal": "all",
      "naming_strategy": "full-path",
      "use_title_as_name": false
    },
    {
      "enum_field_as_literal": "all",
      "naming_strategy": "full-path",
      "use_title_as_name": true
    }
  ],
  "import_check": [
    {
      "arguments": [
        "--input-file-type",
        "openapi",
        "--naming-strategy",
        "full-path",
        "--output-model-type",
        "pydantic_v2.BaseModel",
        "--preset",
        "standard-py310-20261017",
        "--target-python-version",
        "3.10"
      ],
      "labels": [
        "recommended"
      ],
      "result": "ok",
      "schema": "pets"
    },
    {
      "arguments": [
        "--input-file-type",
        "openapi",
        "--output-model-type",
        "pydantic_v2.BaseModel",
        "--target-python-version",
        "3.10",
        "--preset",
        "standard-py310-20261017",
        "--naming-strategy",
        "full-path",
        "--enum-field-as-literal",
        "all"
      ],
      "labels": [
        "grid best"
      ],
      "result": "ok",
      "schema": "pets"
    },
    {
      "arguments": [
        "--input-file-type",
        "openapi",
        "--output-model-type",
        "pydantic_v2.BaseModel",
        "--target-python-version",
        "3.10",
        "--preset",
        "standard-py310-20261017",
        "--enum-field-as-literal",
        "all"
      ],
      "labels": [
        "preset + enum_field_as_literal=\"all\""
      ],
      "result": "ok",
      "schema": "pets"
    },
    {
      "arguments": [
        "--input-file-type",
        "openapi",
        "--naming-strategy",
        "full-path",
        "--output-model-type",
        "pydantic_v2.BaseModel",
        "--preset",
        "standard-py310-20261017",
        "--target-python-version",
        "3.10"
      ],
      "labels": [
        "recommended"
      ],
      "result": "ok",
      "schema": "shop"
    },
    {
      "arguments": [
        "--input-file-type",
        "openapi",
        "--output-model-type",
        "pydantic_v2.BaseModel",
        "--target-python-version",
        "3.10",
        "--preset",
        "standard-py310-20261017",
        "--enum-field-as-literal",
        "all"
      ],
      "labels": [
        "grid best",
        "preset + enum_field_as_literal=\"all\""
      ],
      "result": "ok",
      "schema": "shop"
    },
    {
      "arguments": [
        "--input-file-type",
        "jsonschema",
        "--naming-strategy",
        "full-path",
        "--output-model-type",
        "pydantic_v2.BaseModel",
        "--preset",
        "standard-py310-20261017",
        "--target-python-version",
        "3.10"
      ],
      "labels": [
        "recommended"
      ],
      "result": "ok",
      "schema": "config"
    },
    {
      "arguments": [
        "--input-file-type",
        "jsonschema",
        "--output-model-type",
        "pydantic_v2.BaseModel",
        "--target-python-version",
        "3.10",
        "--preset",
        "standard-py310-20261017",
        "--enum-field-as-literal",
        "all"
      ],
      "labels": [
        "grid best",
        "preset + enum_field_as_literal=\"all\""
      ],
      "result": "ok",
      "schema": "config"
    }
  ],
  "preset_candidates": [
    {
      "decision": "naming-strategy",
      "eligible": false,
      "losses": {
        "config": 0,
        "shop": 0
      },
      "status": "not proposed",
      "values": {
        "naming_strategy": "full-path"
      },
      "wins": {
        "calibration": [
          1,
          2
        ],
        "holdout": [
          0,
          1
        ]
      }
    },
    {
      "decision": "enum-shape",
      "eligible": true,
      "losses": {},
      "status": "not proposed: not import-checked on broken",
      "values": {
        "enum_field_as_literal": "all"
      },
      "wins": {
        "calibration": [
          2,
          2
        ],
        "holdout": [
          1,
          1
        ]
      }
    },
    {
      "decision": "title-source",
      "eligible": false,
      "losses": {
        "shop": 2
      },
      "status": "not proposed",
      "values": {
        "use_title_as_name": true
      },
      "wins": {
        "calibration": [
          0,
          2
        ],
        "holdout": [
          0,
          1
        ]
      }
    }
  ],
  "results": {
    "broken": {
      "grid": [
        {
          "arguments": [],
          "delta": {},
          "preset": "standard-py310-20261017",
          "rejected": "Unable to read the input as a JSON Schema document: Expected dict, got list"
        },
        {
          "arguments": [
            "--use-title-as-name"
          ],
          "delta": {
            "use_title_as_name": true
          },
          "preset": "standard-py310-20261017",
          "rejected": "Unable to read the input as a JSON Schema document: Expected dict, got list"
        },
        {
          "arguments": [
            "--enum-field-as-literal",
            "all"
          ],
          "delta": {
            "enum_field_as_literal": "all"
          },
          "preset": "standard-py310-20261017",
          "rejected": "Unable to read the input as a JSON Schema document: Expected dict, got list"
        },
        {
          "arguments": [
            "--enum-field-as-literal",
            "all",
            "--use-title-as-name"
          ],
          "delta": {
            "enum_field_as_literal": "all",
            "use_title_as_name": true
          },
          "preset": "standard-py310-20261017",
          "rejected": "Unable to read the input as a JSON Schema document: Expected dict, got list"
        },
        {
          "arguments": [
            "--naming-strategy",
            "full-path"
          ],
          "delta": {
            "naming_strategy": "full-path"
          },
          "preset": "standard-py310-20261017",
          "rejected": "Unable to read the input as a JSON Schema document: Expected dict, got list"
        },
        {
          "arguments": [
            "--naming-strategy",
            "full-path",
            "--use-title-as-name"
          ],
          "delta": {
            "naming_strategy": "full-path",
            "use_title_as_name": true
          },
          "preset": "standard-py310-20261017",
          "rejected": "Unable to read the input as a JSON Schema document: Expected dict, got list"
        },
        {
          "arguments": [
            "--naming-strategy",
            "full-path",
            "--enum-field-as-literal",
            "all"
          ],
          "delta": {
            "enum_field_as_literal": "all",
            "naming_strategy": "full-path"
          },
          "preset": "standard-py310-20261017",
          "rejected": "Unable to read the input as a JSON Schema document: Expected dict, got list"
        },
        {
          "arguments": [
            "--naming-strategy",
            "full-path",
            "--enum-field-as-literal",
            "all",
            "--use-title-as-name"
          ],
          "delta": {
            "enum_field_as_literal": "all",
            "naming_strategy": "full-path",
            "use_title_as_name": true
          },
          "preset": "standard-py310-20261017",
          "rejected": "Unable to read the input as a JSON Schema document: Expected dict, got list"
        }
      ],
      "recommendation": {
        "error": "Unable to read the input as a JSON Schema document: Expected dict, got list"
      }
    },
    "config": {
      "grid": [
        {
          "arguments": [],
          "delta": {},
          "dropped_constraints": 0,
          "metrics": {
            "component": 1,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 3,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 12,
            "median_length": 5,
            "numbered": 1,
            "operation": 0,
            "other_problems": 0,
            "problems": 1,
            "problems_percent": 25.0,
            "readable": 3,
            "statuscode": 0,
            "types": 4,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": null
        },
        {
          "arguments": [
            "--use-title-as-name"
          ],
          "delta": {
            "use_title_as_name": true
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 1,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 3,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 12,
            "median_length": 5,
            "numbered": 1,
            "operation": 0,
            "other_problems": 0,
            "problems": 1,
            "problems_percent": 25.0,
            "readable": 3,
            "statuscode": 0,
            "types": 4,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": null
        },
        {
          "arguments": [
            "--enum-field-as-literal",
            "all"
          ],
          "delta": {
            "enum_field_as_literal": "all"
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 1,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 1,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 12,
            "median_length": 12,
            "numbered": 0,
            "operation": 0,
            "other_problems": 0,
            "problems": 0,
            "problems_percent": 0.0,
            "readable": 2,
            "statuscode": 0,
            "types": 2,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": null
        },
        {
          "arguments": [
            "--enum-field-as-literal",
            "all",
            "--use-title-as-name"
          ],
          "delta": {
            "enum_field_as_literal": "all",
            "use_title_as_name": true
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 1,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 1,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 12,
            "median_length": 12,
            "numbered": 0,
            "operation": 0,
            "other_problems": 0,
            "problems": 0,
            "problems_percent": 0.0,
            "readable": 2,
            "statuscode": 0,
            "types": 2,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": null
        },
        {
          "arguments": [
            "--naming-strategy",
            "full-path"
          ],
          "delta": {
            "naming_strategy": "full-path"
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 1,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 3,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 21,
            "median_length": 17,
            "numbered": 0,
            "operation": 0,
            "other_problems": 0,
            "problems": 0,
            "problems_percent": 0.0,
            "readable": 4,
            "statuscode": 0,
            "types": 4,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": null
        },
        {
          "arguments": [
            "--naming-strategy",
            "full-path",
            "--use-title-as-name"
          ],
          "delta": {
            "naming_strategy": "full-path",
            "use_title_as_name": true
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 1,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 3,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 21,
            "median_length": 17,
            "numbered": 0,
            "operation": 0,
            "other_problems": 0,
            "problems": 0,
            "problems_percent": 0.0,
            "readable": 4,
            "statuscode": 0,
            "types": 4,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": null
        },
        {
          "arguments": [
            "--naming-strategy",
            "full-path",
            "--enum-field-as-literal",
            "all"
          ],
          "delta": {
            "enum_field_as_literal": "all",
            "naming_strategy": "full-path"
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 1,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 1,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 17,
            "median_length": 17,
            "numbered": 0,
            "operation": 0,
            "other_problems": 0,
            "problems": 0,
            "problems_percent": 0.0,
            "readable": 2,
            "statuscode": 0,
            "types": 2,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": null
        },
        {
          "arguments": [
            "--naming-strategy",
            "full-path",
            "--enum-field-as-literal",
            "all",
            "--use-title-as-name"
          ],
          "delta": {
            "enum_field_as_literal": "all",
            "naming_strategy": "full-path",
            "use_title_as_name": true
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 1,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 1,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 17,
            "median_length": 17,
            "numbered": 0,
            "operation": 0,
            "other_problems": 0,
            "problems": 0,
            "problems_percent": 0.0,
            "readable": 2,
            "statuscode": 0,
            "types": 2,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": null
        }
      ],
      "recommendation": {
        "arguments": [
          "--input-file-type",
          "jsonschema",
          "--naming-strategy",
          "full-path",
          "--output-model-type",
          "pydantic_v2.BaseModel",
          "--preset",
          "standard-py310-20261017",
          "--target-python-version",
          "3.10"
        ],
        "baseline": {
          "configured": false,
          "covers": [],
          "family": "standard",
          "preset": "standard-py310-20261017"
        },
        "calibrated_presets": "20261017",
        "consider": [],
        "context": {
          "output_model_type": "pydantic_v2.BaseModel",
          "target_python_version": "3.10"
        },
        "disagreements": [],
        "facts": {
          "duplicate_title_examples": "",
          "format_examples": "",
          "inline_title_examples": "",
          "key_style": "",
          "root_title": "Tool Settings",
          "schema": "JSON Schema (http://json-schema.org/draft-07/schema#)",
          "scopes": "",
          "shared_inline_name_examples": "mode x2"
        },
        "format": "json",
        "input": {
          "analysed": true,
          "document": "JSON Schema (http://json-schema.org/draft-07/schema#)",
          "input_file_type": "jsonschema",
          "source": "file"
        },
        "kind": "recommend-options",
        "left_out": [
          {
            "arguments": [
              "--class-name",
              "Config"
            ],
            "caveats": [],
            "contested_reason": null,
            "decision": "root-name",
            "evidence": [
              "SchemaStore tsconfig schema: JSONSchemaForTheTypeScriptCompilerSConfigurationFile became TsConfig, names over 40 characters 6 -> 0",
              "SchemaStore workflow, docker-compose and package.json schemas: Model became Workflow, Compose and PackageJson"
            ],
            "reason": "The root schema is an object model. Without --class-name its class is Model (with --use-title-as-name, its title: Tool Settings), and full-path prefixes that name onto root-level models. The suggested name comes from the input file name; replace it with the name the project wants.",
            "rule": "root.class-name-for-root-object",
            "set": {
              "class_name": "Config"
            },
            "trial": {
              "after": "recommended",
              "before": "recommended - root-name",
              "changes": {
                "added": 0,
                "examples": [
                  {
                    "after": "Config",
                    "before": "ToolSettings",
                    "location": "(root)"
                  },
                  {
                    "after": "ConfigCache",
                    "before": "ToolSettingsCache",
                    "location": "(root) > cache"
                  },
                  {
                    "after": "ConfigCacheMode",
                    "before": "ToolSettingsCacheMode",
                    "location": "(root) > cache > mode"
                  }
                ],
                "matched": 4,
                "removed": 0,
                "renamed": 4,
                "renumbered": 0
              }
            }
          }
        ],
        "mode": "full",
        "not_recommended": [],
        "notes": [],
        "policy": [],
        "recommendations": [
          {
            "arguments": [
              "--naming-strategy",
              "full-path"
            ],
            "caveats": [],
            "contested_reason": null,
            "decision": "naming-strategy",
            "evidence": [
              "GitHub REST API description: numbered names 663 -> 53; locations renamed between two versions 17% -> 0.0%",
              "Petstore: Status and Status1 became OrderStatus and PetStatus",
              "Stripe API description: the expandable ID string of charge no longer displaces the charge component (ChargeModel)",
              "SchemaStore workflow and tsconfig schemas: full-path doubled or lengthened names and lost"
            ],
            "reason": "Inline schemas under different parents share property names (names: 1, e.g. mode x2; inline names equal to a component name: 0). Numbered names (Status, Status1) depend on parse order and shift when the schema grows; full-path names each inline model after its parent.",
            "rule": "naming.qualify-shared-inline-names",
            "set": {
              "naming_strategy": "full-path"
            },
            "trial": {
              "after": "recommended - root-name",
              "before": "preset",
              "changes": {
                "added": 0,
                "examples": [
                  {
                    "after": "ToolSettingsCacheMode",
                    "before": "Mode1",
                    "location": "(root) > cache > mode"
                  },
                  {
                    "after": "ToolSettingsMode",
                    "before": "Mode",
                    "location": "(root) > mode"
                  },
                  {
                    "after": "ToolSettingsCache",
                    "before": "Cache",
                    "location": "(root) > cache"
                  }
                ],
                "matched": 4,
                "removed": 0,
                "renamed": 3,
                "renumbered": 0
              }
            }
          }
        ],
        "rules_revision": "2026-10-18",
        "signals": {
          "all_enums": 2,
          "boolean_exclusive_bounds": 0,
          "coercible_scalars": 0,
          "component_enums": 0,
          "component_title_duplicate_groups": 0,
          "component_titles_equal_other_key": 0,
          "component_titles_equal_own_key": 0,
          "component_titles_in_duplicate_groups": 0,
          "components": 0,
          "decimal_formats": 0,
          "discriminated_unions": 0,
          "dotted_key_namespaces": 0,
          "dotted_keys": 0,
          "dotted_namespace_reference_cycles": 0,
          "duplicate_inline_enum_shapes": 0,
          "duplicate_inline_enums": 0,
          "duplicate_inline_objects": 0,
          "duplicate_inline_shapes": 0,
          "estimated_models": 3,
          "formats": 0,
          "inline_enums": 2,
          "inline_names_equal_component": 0,
          "inline_object_union_variants": 0,
          "inline_objects": 1,
          "inline_scalar_union_variants": 0,
          "inline_tagged_union_branches": 0,
          "inline_title_max_repeat": 0,
          "inline_titled_objects": 0,
          "inline_titled_union_variants": 0,
          "inline_union_variants": 0,
          "integer_range_formats": 0,
          "max_inline_depth": 1,
          "multiple_of": 0,
          "nullable_keywords": 0,
          "operations": 0,
          "parent_copy_union_branches": 0,
          "pattern_properties": 0,
          "root_is_object": 1,
          "root_title_words": 2,
          "shared_inline_enum_names": 1,
          "shared_inline_names": 1,
          "shared_inline_object_names": 0,
          "single_key_required_open": 0,
          "single_key_union_branches": 0,
          "single_value_enum_union_branches": 0,
          "single_value_enums": 0,
          "tagged_behind_ref": 0,
          "titled_components": 0,
          "unions": 0,
          "unique_items": 0,
          "unmodeled_pattern_properties": 0
        },
        "trial": {
          "candidates": [
            {
              "arguments": [],
              "dropped_constraint_warnings": 0,
              "error": null,
              "label": "current",
              "metrics": {
                "component": 1,
                "displaced": 0,
                "doubled": 0,
                "doubled_from_spec": 0,
                "generic": 0,
                "inline": 3,
                "inline_like_component": 0,
                "long": 0,
                "max_length": 12,
                "median_length": 5,
                "numbered": 1,
                "operation": 0,
                "other_problems": 0,
                "problems": 1,
                "problems_percent": 25.0,
                "readable": 3,
                "statuscode": 0,
                "types": 4,
                "union_variants": 0,
                "union_variants_numbered": 0,
                "union_variants_parent_numbered": 0
              },
              "preset": null,
              "selectable": false,
              "set": {},
              "stability": null
            },
            {
              "arguments": [],
              "dropped_constraint_warnings": 0,
              "error": null,
              "label": "preset",
              "metrics": {
                "component": 1,
                "displaced": 0,
                "doubled": 0,
                "doubled_from_spec": 0,
                "generic": 0,
                "inline": 3,
                "inline_like_component": 0,
                "long": 0,
                "max_length": 12,
                "median_length": 5,
                "numbered": 1,
                "operation": 0,
                "other_problems": 0,
                "problems": 1,
                "problems_percent": 25.0,
                "readable": 3,
                "statuscode": 0,
                "types": 4,
                "union_variants": 0,
                "union_variants_numbered": 0,
                "union_variants_parent_numbered": 0
              },
              "preset": "standard-py310-20261017",
              "selectable": true,
              "set": {},
              "stability": null
            },
            {
              "arguments": [
                "--naming-strategy",
                "full-path",
                "--class-name",
                "Config"
              ],
              "dropped_constraint_warnings": 0,
              "error": null,
              "label": "recommended",
              "metrics": {
                "component": 1,
                "displaced": 0,
                "doubled": 0,
                "doubled_from_spec": 0,
                "generic": 1,
                "inline": 3,
                "inline_like_component": 0,
                "long": 0,
                "max_length": 15,
                "median_length": 11,
                "numbered": 0,
                "operation": 0,
                "other_problems": 1,
                "problems": 1,
                "problems_percent": 25.0,
                "readable": 3,
                "statuscode": 0,
                "types": 4,
                "union_variants": 0,
                "union_variants_numbered": 0,
                "union_variants_parent_numbered": 0
              },
              "preset": "standard-py310-20261017",
              "selectable": true,
              "set": {
                "class_name": "Config",
                "naming_strategy": "full-path"
              },
              "stability": null
            },
            {
              "arguments": [
                "--class-name",
                "Config"
              ],
              "dropped_constraint_warnings": 0,
              "error": null,
              "label": "recommended - naming-strategy",
              "metrics": {
                "component": 1,
                "displaced": 0,
                "doubled": 0,
                "doubled_from_spec": 0,
                "generic": 1,
                "inline": 3,
                "inline_like_component": 0,
                "long": 0,
                "max_length": 6,
                "median_length": 5,
                "numbered": 1,
                "operation": 0,
                "other_problems": 1,
                "problems": 2,
                "problems_percent": 50.0,
                "readable": 2,
                "statuscode": 0,
                "types": 4,
                "union_variants": 0,
                "union_variants_numbered": 0,
                "union_variants_parent_numbered": 0
              },
              "preset": "standard-py310-20261017",
              "selectable": true,
              "set": {
                "class_name": "Config"
              },
              "stability": null
            },
            {
              "arguments": [
                "--naming-strategy",
                "full-path"
              ],
              "dropped_constraint_warnings": 0,
              "error": null,
              "label": "recommended - root-name",
              "metrics": {
                "component": 1,
                "displaced": 0,
                "doubled": 0,
                "doubled_from_spec": 0,
                "generic": 0,
                "inline": 3,
                "inline_like_component": 0,
                "long": 0,
                "max_length": 21,
                "median_length": 17,
                "numbered": 0,
                "operation": 0,
                "other_problems": 0,
                "problems": 0,
                "problems_percent": 0.0,
                "readable": 4,
                "statuscode": 0,
                "types": 4,
                "union_variants": 0,
                "union_variants_numbered": 0,
                "union_variants_parent_numbered": 0
              },
              "preset": "standard-py310-20261017",
              "selectable": true,
              "set": {
                "naming_strategy": "full-path"
              },
              "stability": null
            }
          ],
          "current": "current",
          "dropped": 0,
          "metrics_version": 2,
          "migration": {
            "added": 0,
            "examples": [
              {
                "after": "ToolSettingsCacheMode",
                "before": "Mode1",
                "location": "(root) > cache > mode"
              },
              {
                "after": "ToolSettingsMode",
                "before": "Mode",
                "location": "(root) > mode"
              },
              {
                "after": "ToolSettingsCache",
                "before": "Cache",
                "location": "(root) > cache"
              }
            ],
            "matched": 4,
            "removed": 0,
            "renamed": 3,
            "renumbered": 0
          },
          "ranking": [
            "recommended - root-name",
            "recommended",
            "current",
            "preset",
            "recommended - naming-strategy"
          ],
          "remeasured": 0,
          "selected": "recommended - root-name"
        },
        "validation": [],
        "version": 1
      }
    },
    "pets": {
      "grid": [
        {
          "arguments": [],
          "delta": {},
          "dropped_constraints": 0,
          "metrics": {
            "component": 3,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 6,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 7,
            "median_length": 5,
            "numbered": 3,
            "operation": 0,
            "other_problems": 0,
            "problems": 3,
            "problems_percent": 33.3,
            "readable": 6,
            "statuscode": 0,
            "types": 9,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": 0
        },
        {
          "arguments": [
            "--use-title-as-name"
          ],
          "delta": {
            "use_title_as_name": true
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 3,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 6,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 7,
            "median_length": 5,
            "numbered": 3,
            "operation": 0,
            "other_problems": 0,
            "problems": 3,
            "problems_percent": 33.3,
            "readable": 6,
            "statuscode": 0,
            "types": 9,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": 0
        },
        {
          "arguments": [
            "--enum-field-as-literal",
            "all"
          ],
          "delta": {
            "enum_field_as_literal": "all"
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 3,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 2,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 6,
            "median_length": 5,
            "numbered": 1,
            "operation": 0,
            "other_problems": 0,
            "problems": 1,
            "problems_percent": 20.0,
            "readable": 4,
            "statuscode": 0,
            "types": 5,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": 0
        },
        {
          "arguments": [
            "--enum-field-as-literal",
            "all",
            "--use-title-as-name"
          ],
          "delta": {
            "enum_field_as_literal": "all",
            "use_title_as_name": true
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 3,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 2,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 6,
            "median_length": 5,
            "numbered": 1,
            "operation": 0,
            "other_problems": 0,
            "problems": 1,
            "problems_percent": 20.0,
            "readable": 4,
            "statuscode": 0,
            "types": 5,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": 0
        },
        {
          "arguments": [
            "--naming-strategy",
            "full-path"
          ],
          "delta": {
            "naming_strategy": "full-path"
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 3,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 6,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 11,
            "median_length": 9,
            "numbered": 0,
            "operation": 0,
            "other_problems": 0,
            "problems": 0,
            "problems_percent": 0.0,
            "readable": 9,
            "statuscode": 0,
            "types": 9,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": 0
        },
        {
          "arguments": [
            "--naming-strategy",
            "full-path",
            "--use-title-as-name"
          ],
          "delta": {
            "naming_strategy": "full-path",
            "use_title_as_name": true
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 3,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 6,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 11,
            "median_length": 9,
            "numbered": 0,
            "operation": 0,
            "other_problems": 0,
            "problems": 0,
            "problems_percent": 0.0,
            "readable": 9,
            "statuscode": 0,
            "types": 9,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": 0
        },
        {
          "arguments": [
            "--naming-strategy",
            "full-path",
            "--enum-field-as-literal",
            "all"
          ],
          "delta": {
            "enum_field_as_literal": "all",
            "naming_strategy": "full-path"
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 3,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 2,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 10,
            "median_length": 5,
            "numbered": 0,
            "operation": 0,
            "other_problems": 0,
            "problems": 0,
            "problems_percent": 0.0,
            "readable": 5,
            "statuscode": 0,
            "types": 5,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": 0
        },
        {
          "arguments": [
            "--naming-strategy",
            "full-path",
            "--enum-field-as-literal",
            "all",
            "--use-title-as-name"
          ],
          "delta": {
            "enum_field_as_literal": "all",
            "naming_strategy": "full-path",
            "use_title_as_name": true
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 3,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 2,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 10,
            "median_length": 5,
            "numbered": 0,
            "operation": 0,
            "other_problems": 0,
            "problems": 0,
            "problems_percent": 0.0,
            "readable": 5,
            "statuscode": 0,
            "types": 5,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": 0
        }
      ],
      "recommendation": {
        "arguments": [
          "--input-file-type",
          "openapi",
          "--naming-strategy",
          "full-path",
          "--output-model-type",
          "pydantic_v2.BaseModel",
          "--preset",
          "standard-py310-20261017",
          "--target-python-version",
          "3.10"
        ],
        "baseline": {
          "configured": false,
          "covers": [],
          "family": "standard",
          "preset": "standard-py310-20261017"
        },
        "calibrated_presets": "20261017",
        "consider": [],
        "context": {
          "output_model_type": "pydantic_v2.BaseModel",
          "target_python_version": "3.10"
        },
        "disagreements": [],
        "facts": {
          "duplicate_title_examples": "",
          "format_examples": "",
          "inline_title_examples": "",
          "key_style": "PascalCase (3 of 3)",
          "root_title": "",
          "schema": "OpenAPI 3.0.3",
          "scopes": "schemas",
          "shared_inline_name_examples": "status x3, owner x2"
        },
        "format": "json",
        "input": {
          "analysed": true,
          "document": "OpenAPI 3.0.3",
          "input_file_type": "openapi",
          "source": "file"
        },
        "kind": "recommend-options",
        "left_out": [],
        "mode": "full",
        "not_recommended": [],
        "notes": [],
        "policy": [],
        "recommendations": [
          {
            "arguments": [
              "--naming-strategy",
              "full-path"
            ],
            "caveats": [],
            "contested_reason": null,
            "decision": "naming-strategy",
            "evidence": [
              "GitHub REST API description: numbered names 663 -> 53; locations renamed between two versions 17% -> 0.0%",
              "Petstore: Status and Status1 became OrderStatus and PetStatus",
              "Stripe API description: the expandable ID string of charge no longer displaces the charge component (ChargeModel)",
              "SchemaStore workflow and tsconfig schemas: full-path doubled or lengthened names and lost"
            ],
            "reason": "Inline schemas under different parents share property names (names: 2, e.g. status x3, owner x2; inline names equal to a component name: 0). Numbered names (Status, Status1) depend on parse order and shift when the schema grows; full-path names each inline model after its parent.",
            "rule": "naming.qualify-shared-inline-names",
            "set": {
              "naming_strategy": "full-path"
            },
            "trial": {
              "after": "recommended",
              "before": "preset",
              "changes": {
                "added": 0,
                "examples": [
                  {
                    "after": "OrderStatus",
                    "before": "Status1",
                    "location": "components/schemas/Order > status"
                  },
                  {
                    "after": "PetStatus",
                    "before": "Status",
                    "location": "components/schemas/Pet > status"
                  },
                  {
                    "after": "StoreStatus",
                    "before": "Status2",
                    "location": "components/schemas/Store > status"
                  }
                ],
                "matched": 9,
                "removed": 0,
                "renamed": 6,
                "renumbered": 0
              }
            }
          }
        ],
        "rules_revision": "2026-10-18",
        "signals": {
          "all_enums": 4,
          "boolean_exclusive_bounds": 0,
          "coercible_scalars": 0,
          "component_enums": 0,
          "component_title_duplicate_groups": 0,
          "component_titles_equal_other_key": 0,
          "component_titles_equal_own_key": 0,
          "component_titles_in_duplicate_groups": 0,
          "components": 3,
          "decimal_formats": 0,
          "discriminated_unions": 0,
          "dotted_key_namespaces": 0,
          "dotted_keys": 0,
          "dotted_namespace_reference_cycles": 0,
          "duplicate_inline_enum_shapes": 0,
          "duplicate_inline_enums": 0,
          "duplicate_inline_objects": 0,
          "duplicate_inline_shapes": 0,
          "estimated_models": 9,
          "formats": 0,
          "inline_enums": 4,
          "inline_names_equal_component": 0,
          "inline_object_union_variants": 0,
          "inline_objects": 2,
          "inline_scalar_union_variants": 0,
          "inline_tagged_union_branches": 0,
          "inline_title_max_repeat": 0,
          "inline_titled_objects": 0,
          "inline_titled_union_variants": 0,
          "inline_union_variants": 0,
          "integer_range_formats": 0,
          "max_inline_depth": 1,
          "multiple_of": 0,
          "nullable_keywords": 0,
          "operations": 0,
          "parent_copy_union_branches": 0,
          "pattern_properties": 0,
          "root_is_object": 0,
          "root_title_words": 0,
          "shared_inline_enum_names": 1,
          "shared_inline_names": 2,
          "shared_inline_object_names": 1,
          "single_key_required_open": 0,
          "single_key_union_branches": 0,
          "single_value_enum_union_branches": 0,
          "single_value_enums": 0,
          "tagged_behind_ref": 0,
          "titled_components": 0,
          "unions": 0,
          "unique_items": 0,
          "unmodeled_pattern_properties": 0
        },
        "trial": {
          "candidates": [
            {
              "arguments": [],
              "dropped_constraint_warnings": 0,
              "error": null,
              "label": "current",
              "metrics": {
                "component": 3,
                "displaced": 0,
                "doubled": 0,
                "doubled_from_spec": 0,
                "generic": 0,
                "inline": 6,
                "inline_like_component": 0,
                "long": 0,
                "max_length": 7,
                "median_length": 5,
                "numbered": 3,
                "operation": 0,
                "other_problems": 0,
                "problems": 3,
                "problems_percent": 33.3,
                "readable": 6,
                "statuscode": 0,
                "types": 9,
                "union_variants": 0,
                "union_variants_numbered": 0,
                "union_variants_parent_numbered": 0
              },
              "preset": null,
              "selectable": false,
              "set": {},
              "stability": {
                "fingerprints_matched": 3,
                "fingerprints_renamed": 0,
                "fingerprints_renumbered": 0,
                "locations": {
                  "added": 3,
                  "examples": [],
                  "matched": 6,
                  "removed": 0,
                  "renamed": 0,
                  "renumbered": 0
                }
              }
            },
            {
              "arguments": [],
              "dropped_constraint_warnings": 0,
              "error": null,
              "label": "preset",
              "metrics": {
                "component": 3,
                "displaced": 0,
                "doubled": 0,
                "doubled_from_spec": 0,
                "generic": 0,
                "inline": 6,
                "inline_like_component": 0,
                "long": 0,
                "max_length": 7,
                "median_length": 5,
                "numbered": 3,
                "operation": 0,
                "other_problems": 0,
                "problems": 3,
                "problems_percent": 33.3,
                "readable": 6,
                "statuscode": 0,
                "types": 9,
                "union_variants": 0,
                "union_variants_numbered": 0,
                "union_variants_parent_numbered": 0
              },
              "preset": "standard-py310-20261017",
              "selectable": true,
              "set": {},
              "stability": {
                "fingerprints_matched": 3,
                "fingerprints_renamed": 0,
                "fingerprints_renumbered": 0,
                "locations": {
                  "added": 3,
                  "examples": [],
                  "matched": 6,
                  "removed": 0,
                  "renamed": 0,
                  "renumbered": 0
                }
              }
            },
            {
              "arguments": [
                "--naming-strategy",
                "full-path"
              ],
              "dropped_constraint_warnings": 0,
              "error": null,
              "label": "recommended",
              "metrics": {
                "component": 3,
                "displaced": 0,
                "doubled": 0,
                "doubled_from_spec": 0,
                "generic": 0,
                "inline": 6,
                "inline_like_component": 0,
                "long": 0,
                "max_length": 11,
                "median_length": 9,
                "numbered": 0,
                "operation": 0,
                "other_problems": 0,
                "problems": 0,
                "problems_percent": 0.0,
                "readable": 9,
                "statuscode": 0,
                "types": 9,
                "union_variants": 0,
                "union_variants_numbered": 0,
                "union_variants_parent_numbered": 0
              },
              "preset": "standard-py310-20261017",
              "selectable": true,
              "set": {
                "naming_strategy": "full-path"
              },
              "stability": {
                "fingerprints_matched": 3,
                "fingerprints_renamed": 0,
                "fingerprints_renumbered": 0,
                "locations": {
                  "added": 3,
                  "examples": [],
                  "matched": 6,
                  "removed": 0,
                  "renamed": 0,
                  "renumbered": 0
                }
              }
            }
          ],
          "current": "current",
          "dropped": 0,
          "metrics_version": 2,
          "migration": {
            "added": 0,
            "examples": [
              {
                "after": "OrderStatus",
                "before": "Status1",
                "location": "components/schemas/Order > status"
              },
              {
                "after": "PetStatus",
                "before": "Status",
                "location": "components/schemas/Pet > status"
              },
              {
                "after": "StoreStatus",
                "before": "Status2",
                "location": "components/schemas/Store > status"
              }
            ],
            "matched": 9,
            "removed": 0,
            "renamed": 6,
            "renumbered": 0
          },
          "ranking": [
            "recommended",
            "current",
            "preset"
          ],
          "remeasured": 0,
          "selected": "recommended"
        },
        "validation": [],
        "version": 1
      }
    },
    "shop": {
      "grid": [
        {
          "arguments": [],
          "delta": {},
          "dropped_constraints": 0,
          "metrics": {
            "component": 2,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 4,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 7,
            "median_length": 5,
            "numbered": 1,
            "operation": 0,
            "other_problems": 0,
            "problems": 1,
            "problems_percent": 16.7,
            "readable": 5,
            "statuscode": 0,
            "types": 6,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": null
        },
        {
          "arguments": [
            "--use-title-as-name"
          ],
          "delta": {
            "use_title_as_name": true
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 2,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 4,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 6,
            "median_length": 5,
            "numbered": 3,
            "operation": 0,
            "other_problems": 0,
            "problems": 3,
            "problems_percent": 50.0,
            "readable": 3,
            "statuscode": 0,
            "types": 6,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": null
        },
        {
          "arguments": [
            "--enum-field-as-literal",
            "all"
          ],
          "delta": {
            "enum_field_as_literal": "all"
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 2,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 2,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 7,
            "median_length": 4,
            "numbered": 0,
            "operation": 0,
            "other_problems": 0,
            "problems": 0,
            "problems_percent": 0.0,
            "readable": 4,
            "statuscode": 0,
            "types": 4,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": null
        },
        {
          "arguments": [
            "--enum-field-as-literal",
            "all",
            "--use-title-as-name"
          ],
          "delta": {
            "enum_field_as_literal": "all",
            "use_title_as_name": true
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 2,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 2,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 5,
            "median_length": 5,
            "numbered": 2,
            "operation": 0,
            "other_problems": 0,
            "problems": 2,
            "problems_percent": 50.0,
            "readable": 2,
            "statuscode": 0,
            "types": 4,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": null
        },
        {
          "arguments": [
            "--naming-strategy",
            "full-path"
          ],
          "delta": {
            "naming_strategy": "full-path"
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 2,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 4,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 16,
            "median_length": 11,
            "numbered": 0,
            "operation": 0,
            "other_problems": 0,
            "problems": 0,
            "problems_percent": 0.0,
            "readable": 6,
            "statuscode": 0,
            "types": 6,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": null
        },
        {
          "arguments": [
            "--naming-strategy",
            "full-path",
            "--use-title-as-name"
          ],
          "delta": {
            "naming_strategy": "full-path",
            "use_title_as_name": true
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 2,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 4,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 14,
            "median_length": 9,
            "numbered": 3,
            "operation": 0,
            "other_problems": 0,
            "problems": 3,
            "problems_percent": 50.0,
            "readable": 3,
            "statuscode": 0,
            "types": 6,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": null
        },
        {
          "arguments": [
            "--naming-strategy",
            "full-path",
            "--enum-field-as-literal",
            "all"
          ],
          "delta": {
            "enum_field_as_literal": "all",
            "naming_strategy": "full-path"
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 2,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 2,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 11,
            "median_length": 8,
            "numbered": 0,
            "operation": 0,
            "other_problems": 0,
            "problems": 0,
            "problems_percent": 0.0,
            "readable": 4,
            "statuscode": 0,
            "types": 4,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": null
        },
        {
          "arguments": [
            "--naming-strategy",
            "full-path",
            "--enum-field-as-literal",
            "all",
            "--use-title-as-name"
          ],
          "delta": {
            "enum_field_as_literal": "all",
            "naming_strategy": "full-path",
            "use_title_as_name": true
          },
          "dropped_constraints": 0,
          "metrics": {
            "component": 2,
            "displaced": 0,
            "doubled": 0,
            "doubled_from_spec": 0,
            "generic": 0,
            "inline": 2,
            "inline_like_component": 0,
            "long": 0,
            "max_length": 9,
            "median_length": 8,
            "numbered": 2,
            "operation": 0,
            "other_problems": 0,
            "problems": 2,
            "problems_percent": 50.0,
            "readable": 2,
            "statuscode": 0,
            "types": 4,
            "union_variants": 0,
            "union_variants_numbered": 0,
            "union_variants_parent_numbered": 0
          },
          "preset": "standard-py310-20261017",
          "renamed": null
        }
      ],
      "recommendation": {
        "arguments": [
          "--input-file-type",
          "openapi",
          "--naming-strategy",
          "full-path",
          "--output-model-type",
          "pydantic_v2.BaseModel",
          "--preset",
          "standard-py310-20261017",
          "--target-python-version",
          "3.10"
        ],
        "baseline": {
          "configured": false,
          "covers": [],
          "family": "standard",
          "preset": "standard-py310-20261017"
        },
        "calibrated_presets": "20261017",
        "consider": [],
        "context": {
          "output_model_type": "pydantic_v2.BaseModel",
          "target_python_version": "3.10"
        },
        "disagreements": [],
        "facts": {
          "duplicate_title_examples": "Item x2",
          "format_examples": "",
          "inline_title_examples": "Line x2",
          "key_style": "PascalCase (2 of 2)",
          "root_title": "",
          "schema": "OpenAPI 3.0.3",
          "scopes": "schemas",
          "shared_inline_name_examples": "state x2"
        },
        "format": "json",
        "input": {
          "analysed": true,
          "document": "OpenAPI 3.0.3",
          "input_file_type": "openapi",
          "source": "file"
        },
        "kind": "recommend-options",
        "left_out": [],
        "mode": "full",
        "not_recommended": [],
        "notes": [],
        "policy": [
          {
            "arguments": [
              "--strict-types",
              "int",
              "float",
              "bool"
            ],
            "caveats": [],
            "contested_reason": null,
            "decision": "strict-types",
            "evidence": [
              "11 JSON documents for integer, number, boolean and string properties, 6 of them invalid: lax mode accepted 5 invalid ones; with int float bool, 0 accepted and 1 valid one rejected (5.0 as an integer); with float bool, 2 accepted (\"5\" and true as integers) and none rejected"
            ],
            "reason": "Pydantic validates in lax mode, which coerces input into the 1 integer, number and boolean schemas: it accepts the string \"5\" and true as integers, \"1.5\" as a number, and \"true\" or 1 as booleans. Strict types reject such input. Whether to accept it depends on the project's clients, not on the schema; strict int also rejects 5.0, which JSON Schema counts as an integer, so leave int out to accept it.",
            "rule": "policy.strict-scalar-types",
            "set": {
              "strict_types": [
                "int",
                "float",
                "bool"
              ]
            },
            "trial": null
          }
        ],
        "recommendations": [
          {
            "arguments": [
              "--naming-strategy",
              "full-path"
            ],
            "caveats": [],
            "contested_reason": null,
            "decision": "naming-strategy",
            "evidence": [
              "GitHub REST API description: numbered names 663 -> 53; locations renamed between two versions 17% -> 0.0%",
              "Petstore: Status and Status1 became OrderStatus and PetStatus",
              "Stripe API description: the expandable ID string of charge no longer displaces the charge component (ChargeModel)",
              "SchemaStore workflow and tsconfig schemas: full-path doubled or lengthened names and lost"
            ],
            "reason": "Inline schemas under different parents share property names (names: 1, e.g. state x2; inline names equal to a component name: 0). Numbered names (Status, Status1) depend on parse order and shift when the schema grows; full-path names each inline model after its parent.",
            "rule": "naming.qualify-shared-inline-names",
            "set": {
              "naming_strategy": "full-path"
            },
            "trial": {
              "after": "recommended",
              "before": "preset",
              "changes": {
                "added": 0,
                "examples": [
                  {
                    "after": "CartItemState",
                    "before": "State",
                    "location": "components/schemas/Cart > items > item > state"
                  },
                  {
                    "after": "InvoiceLineState",
                    "before": "State1",
                    "location": "components/schemas/Invoice > lines > item > state"
                  },
                  {
                    "after": "CartItem",
                    "before": "Item",
                    "location": "components/schemas/Cart > items > item"
                  }
                ],
                "matched": 6,
                "removed": 0,
                "renamed": 4,
                "renumbered": 0
              }
            }
          }
        ],
        "rules_revision": "2026-10-18",
        "signals": {
          "all_enums": 2,
          "boolean_exclusive_bounds": 0,
          "coercible_scalars": 1,
          "component_enums": 0,
          "component_title_duplicate_groups": 1,
          "component_titles_equal_other_key": 0,
          "component_titles_equal_own_key": 0,
          "component_titles_in_duplicate_groups": 2,
          "components": 2,
          "decimal_formats": 0,
          "discriminated_unions": 0,
          "dotted_key_namespaces": 0,
          "dotted_keys": 0,
          "dotted_namespace_reference_cycles": 0,
          "duplicate_inline_enum_shapes": 0,
          "duplicate_inline_enums": 0,
          "duplicate_inline_objects": 0,
          "duplicate_inline_shapes": 0,
          "estimated_models": 6,
          "formats": 0,
          "inline_enums": 2,
          "inline_names_equal_component": 0,
          "inline_object_union_variants": 0,
          "inline_objects": 2,
          "inline_scalar_union_variants": 0,
          "inline_tagged_union_branches": 0,
          "inline_title_max_repeat": 2,
          "inline_titled_objects": 2,
          "inline_titled_union_variants": 0,
          "inline_union_variants": 0,
          "integer_range_formats": 0,
          "max_inline_depth": 1,
          "multiple_of": 0,
          "nullable_keywords": 0,
          "operations": 0,
          "parent_copy_union_branches": 0,
          "pattern_properties": 0,
          "root_is_object": 0,
          "root_title_words": 0,
          "shared_inline_enum_names": 1,
          "shared_inline_names": 1,
          "shared_inline_object_names": 0,
          "single_key_required_open": 0,
          "single_key_union_branches": 0,
          "single_value_enum_union_branches": 0,
          "single_value_enums": 0,
          "tagged_behind_ref": 0,
          "titled_components": 2,
          "unions": 0,
          "unique_items": 0,
          "unmodeled_pattern_properties": 0
        },
        "trial": {
          "candidates": [
            {
              "arguments": [],
              "dropped_constraint_warnings": 0,
              "error": null,
              "label": "current",
              "metrics": {
                "component": 2,
                "displaced": 0,
                "doubled": 0,
                "doubled_from_spec": 0,
                "generic": 0,
                "inline": 4,
                "inline_like_component": 0,
                "long": 0,
                "max_length": 7,
                "median_length": 5,
                "numbered": 1,
                "operation": 0,
                "other_problems": 0,
                "problems": 1,
                "problems_percent": 16.7,
                "readable": 5,
                "statuscode": 0,
                "types": 6,
                "union_variants": 0,
                "union_variants_numbered": 0,
                "union_variants_parent_numbered": 0
              },
              "preset": null,
              "selectable": false,
              "set": {},
              "stability": null
            },
            {
              "arguments": [],
              "dropped_constraint_warnings": 0,
              "error": null,
              "label": "preset",
              "metrics": {
                "component": 2,
                "displaced": 0,
                "doubled": 0,
                "doubled_from_spec": 0,
                "generic": 0,
                "inline": 4,
                "inline_like_component": 0,
                "long": 0,
                "max_length": 7,
                "median_length": 5,
                "numbered": 1,
                "operation": 0,
                "other_problems": 0,
                "problems": 1,
                "problems_percent": 16.7,
                "readable": 5,
                "statuscode": 0,
                "types": 6,
                "union_variants": 0,
                "union_variants_numbered": 0,
                "union_variants_parent_numbered": 0
              },
              "preset": "standard-py310-20261017",
              "selectable": true,
              "set": {},
              "stability": null
            },
            {
              "arguments": [
                "--naming-strategy",
                "full-path"
              ],
              "dropped_constraint_warnings": 0,
              "error": null,
              "label": "recommended",
              "metrics": {
                "component": 2,
                "displaced": 0,
                "doubled": 0,
                "doubled_from_spec": 0,
                "generic": 0,
                "inline": 4,
                "inline_like_component": 0,
                "long": 0,
                "max_length": 16,
                "median_length": 11,
                "numbered": 0,
                "operation": 0,
                "other_problems": 0,
                "problems": 0,
                "problems_percent": 0.0,
                "readable": 6,
                "statuscode": 0,
                "types": 6,
                "union_variants": 0,
                "union_variants_numbered": 0,
                "union_variants_parent_numbered": 0
              },
              "preset": "standard-py310-20261017",
              "selectable": true,
              "set": {
                "naming_strategy": "full-path"
              },
              "stability": null
            }
          ],
          "current": "current",
          "dropped": 0,
          "metrics_version": 2,
          "migration": {
            "added": 0,
            "examples": [
              {
                "after": "CartItemState",
                "before": "State",
                "location": "components/schemas/Cart > items > item > state"
              },
              {
                "after": "InvoiceLineState",
                "before": "State1",
                "location": "components/schemas/Invoice > lines > item > state"
              },
              {
                "after": "CartItem",
                "before": "Item",
                "location": "components/schemas/Cart > items > item"
              }
            ],
            "matched": 6,
            "removed": 0,
            "renamed": 4,
            "renumbered": 0
          },
          "ranking": [
            "recommended",
            "current",
            "preset"
          ],
          "remeasured": 0,
          "selected": "recommended"
        },
        "validation": [],
        "version": 1
      }
    }
  },
  "rules": [
    {
      "covered": "yes",
      "decision": "title-source",
      "disagrees": {
        "calibration": [
          "shop"
        ],
        "holdout": []
      },
      "fires": [],
      "neutral": [
        "pets",
        "config"
      ],
      "rule": "titles.keys-when-titles-collide"
    },
    {
      "covered": "yes",
      "decision": "title-source",
      "disagrees": {
        "calibration": [],
        "holdout": []
      },
      "fires": [],
      "neutral": [
        "pets",
        "config"
      ],
      "rule": "titles.names-from-unique-titles"
    },
    {
      "covered": "yes",
      "decision": "naming-strategy",
      "disagrees": {
        "calibration": [
          "shop"
        ],
        "holdout": [
          "config"
        ]
      },
      "fires": [
        "pets",
        "shop",
        "config"
      ],
      "neutral": [],
      "rule": "naming.qualify-shared-inline-names"
    },
    {
      "covered": "yes",
      "decision": "enum-shape",
      "disagrees": {
        "calibration": [
          "pets",
          "shop"
        ],
        "holdout": [
          "config"
        ]
      },
      "fires": [],
      "neutral": [],
      "rule": "enums.inline-value-sets-as-literal"
    },
    {
      "covered": "decision reuse has no grid axis",
      "decision": "reuse",
      "rule": "reuse.identical-inline-shapes"
    },
    {
      "covered": "decision root-name has no grid axis",
      "decision": "root-name",
      "rule": "root.class-name-for-root-object"
    },
    {
      "covered": "decision dotted-keys has no grid axis",
      "decision": "dotted-keys",
      "rule": "dotted-keys.flat-when-namespaces-cycle"
    },
    {
      "covered": "decision union-variant-names has no grid axis",
      "decision": "union-variant-names",
      "rule": "unions.name-variants-after-tags"
    },
    {
      "covered": "optional, not calibrated",
      "decision": "schema-validators",
      "rule": "validation.check-unique-items-and-pattern-properties"
    },
    {
      "covered": "optional, not calibrated",
      "decision": "strict-types",
      "rule": "policy.strict-scalar-types"
    }
  ],
  "schemas": [
    {
      "best": {
        "arguments": [
          "--naming-strategy",
          "full-path",
          "--enum-field-as-literal",
          "all"
        ],
        "metrics": {
          "component": 3,
          "displaced": 0,
          "doubled": 0,
          "doubled_from_spec": 0,
          "generic": 0,
          "inline": 2,
          "inline_like_component": 0,
          "long": 0,
          "max_length": 10,
          "median_length": 5,
          "numbered": 0,
          "operation": 0,
          "other_problems": 0,
          "problems": 0,
          "problems_percent": 0.0,
          "readable": 5,
          "statuscode": 0,
          "types": 5,
          "union_variants": 0,
          "union_variants_numbered": 0,
          "union_variants_parent_numbered": 0
        },
        "preset": "standard-py310-20261017",
        "renamed": 0,
        "values": {
          "enum_field_as_literal": "all",
          "naming_strategy": "full-path",
          "use_title_as_name": false
        }
      },
      "diff_against": "v1",
      "recommended": {
        "arguments": [
          "--naming-strategy",
          "full-path",
          "--preset",
          "standard-py310-20261017"
        ],
        "metrics": {
          "component": 3,
          "displaced": 0,
          "doubled": 0,
          "doubled_from_spec": 0,
          "generic": 0,
          "inline": 6,
          "inline_like_component": 0,
          "long": 0,
          "max_length": 11,
          "median_length": 9,
          "numbered": 0,
          "operation": 0,
          "other_problems": 0,
          "problems": 0,
          "problems_percent": 0.0,
          "readable": 9,
          "statuscode": 0,
          "types": 9,
          "union_variants": 0,
          "union_variants_numbered": 0,
          "union_variants_parent_numbered": 0
        },
        "renamed": 0,
        "rules": [
          "naming.qualify-shared-inline-names"
        ]
      },
      "ref": "v2",
      "regret": 0,
      "rejected": 0,
      "role": "calibration",
      "schema": "pets"
    },
    {
      "best": {
        "arguments": [
          "--enum-field-as-literal",
          "all"
        ],
        "metrics": {
          "component": 2,
          "displaced": 0,
          "doubled": 0,
          "doubled_from_spec": 0,
          "generic": 0,
          "inline": 2,
          "inline_like_component": 0,
          "long": 0,
          "max_length": 7,
          "median_length": 4,
          "numbered": 0,
          "operation": 0,
          "other_problems": 0,
          "problems": 0,
          "problems_percent": 0.0,
          "readable": 4,
          "statuscode": 0,
          "types": 4,
          "union_variants": 0,
          "union_variants_numbered": 0,
          "union_variants_parent_numbered": 0
        },
        "preset": "standard-py310-20261017",
        "renamed": null,
        "values": {
          "enum_field_as_literal": "all",
          "use_title_as_name": false
        }
      },
      "diff_against": null,
      "recommended": {
        "arguments": [
          "--naming-strategy",
          "full-path",
          "--preset",
          "standard-py310-20261017"
        ],
        "metrics": {
          "component": 2,
          "displaced": 0,
          "doubled": 0,
          "doubled_from_spec": 0,
          "generic": 0,
          "inline": 4,
          "inline_like_component": 0,
          "long": 0,
          "max_length": 16,
          "median_length": 11,
          "numbered": 0,
          "operation": 0,
          "other_problems": 0,
          "problems": 0,
          "problems_percent": 0.0,
          "readable": 6,
          "statuscode": 0,
          "types": 6,
          "union_variants": 0,
          "union_variants_numbered": 0,
          "union_variants_parent_numbered": 0
        },
        "renamed": null,
        "rules": [
          "naming.qualify-shared-inline-names"
        ]
      },
      "ref": "<upstream head>",
      "regret": 0,
      "rejected": 0,
      "role": "calibration",
      "schema": "shop"
    },
    {
      "best": {
        "arguments": [
          "--enum-field-as-literal",
          "all"
        ],
        "metrics": {
          "component": 1,
          "displaced": 0,
          "doubled": 0,
          "doubled_from_spec": 0,
          "generic": 0,
          "inline": 1,
          "inline_like_component": 0,
          "long": 0,
          "max_length": 12,
          "median_length": 12,
          "numbered": 0,
          "operation": 0,
          "other_problems": 0,
          "problems": 0,
          "problems_percent": 0.0,
          "readable": 2,
          "statuscode": 0,
          "types": 2,
          "union_variants": 0,
          "union_variants_numbered": 0,
          "union_variants_parent_numbered": 0
        },
        "preset": "standard-py310-20261017",
        "renamed": null,
        "values": {
          "enum_field_as_literal": "all",
          "use_title_as_name": false
        }
      },
      "diff_against": null,
      "recommended": {
        "arguments": [
          "--naming-strategy",
          "full-path",
          "--preset",
          "standard-py310-20261017"
        ],
        "metrics": {
          "component": 1,
          "displaced": 0,
          "doubled": 0,
          "doubled_from_spec": 0,
          "generic": 0,
          "inline": 3,
          "inline_like_component": 0,
          "long": 0,
          "max_length": 21,
          "median_length": 17,
          "numbered": 0,
          "operation": 0,
          "other_problems": 0,
          "problems": 0,
          "problems_percent": 0.0,
          "readable": 4,
          "statuscode": 0,
          "types": 4,
          "union_variants": 0,
          "union_variants_numbered": 0,
          "union_variants_parent_numbered": 0
        },
        "renamed": null,
        "rules": [
          "naming.qualify-shared-inline-names"
        ]
      },
      "ref": "v1",
      "regret": 0,
      "rejected": 0,
      "role": "holdout",
      "schema": "config"
    },
    {
      "best": null,
      "diff_against": null,
      "error": "Unable to read the input as a JSON Schema document: Expected dict, got list",
      "ref": "v1",
      "rejected": 8,
      "role": "holdout",
      "schema": "broken"
    }
  ],
  "threshold_proposals": [
    {
      "calibration": [
        1,
        0
      ],
      "current": 3,
      "holdout": [
        0,
        0
      ],
      "leaf": "component_title_duplicate_groups >= 3",
      "pointer": "/rules/0/when/any/0/value",
      "proposed": 1,
      "rule": "titles.keys-when-titles-collide"
    },
    {
      "calibration": [
        1,
        0
      ],
      "current": 1,
      "holdout": [
        1,
        0
      ],
      "leaf": "shared_inline_names >= 1",
      "pointer": "/rules/2/when/any/0/value",
      "proposed": 2,
      "rule": "naming.qualify-shared-inline-names"
    },
    {
      "calibration": [
        2,
        0
      ],
      "current": 5,
      "holdout": [
        1,
        0
      ],
      "leaf": "inline_enums >= 5",
      "pointer": "/rules/3/when/all/0/value",
      "proposed": 2,
      "rule": "enums.inline-value-sets-as-literal"
    }
  ],
  "upstream": [
    {
      "date": "2026-02-01",
      "head": "<upstream head>",
      "pinned": "v2",
      "schema": "pets"
    },
    {
      "date": "2026-01-15",
      "head": "<upstream head>",
      "pinned": "<upstream head>",
      "schema": "shop"
    },
    {
      "date": "2026-01-20",
      "head": "<upstream head>",
      "pinned": "v1",
      "schema": "config"
    },
    {
      "date": "2026-01-25",
      "error": "no HEAD reported",
      "pinned": "v1",
      "schema": "broken"
    }
  ]
}

=== second run
exit=0
--- stdout
fetch pets@v1: cached
fetch pets@v2: cached
fetch shop@<upstream head:12>: cached
fetch config@v1: cached, 1 external $ref stubbed
fetch broken@v1: cached
verified 5 files

--- stderr
