Skip to content

feat: regenerate with the customers routes - #4

Merged
nathanfallet merged 1 commit into
mainfrom
feature/customers-route
Oct 21, 2026
Merged

nathanfallet merged 1 commit into
mainfrom
feature/customers-route

Conversation

@nathanfallet

@nathanfallet nathanfallet commented Oct 21, 2026 •

Copy link
Copy Markdown
Member

What

  • Spec and generated code regenerated from https://api.controlresell.com/api/public/openapi.json (production, API 2.100.0), with scripts/generate.sh. No manual edit of generated code.
  • New in the API since the last regeneration (API 2.98.0): the customers routes GET /customers and GET /customers/{id} (backend PR guimauvedigital/controlresell-backend#1495, scope customers:read): from inclusive / to exclusive on the creation date, accountId, cursor pagination. New models Customer, CustomerAddress, CustomerPage. Every other route of the production spec was already in the SDK.
  • Hand-written layer: sdk.customers.list, get, iter.

Validation

pytest: green, 25 tests (2 new).

Not done

Nothing is published to any registry (waits for Nathan's yes).

Revue automatique (cr-review)

Commit relu : dfd464c2247a39903fcae6e71a338bd9150d90ce — 21/10/2026 — tour 1 (N1, ENG-046) — Prête à passer en ready

{
  "schema": "cr-review/1",
  "repo": "python-sdk",
  "pr": 4,
  "head": "dfd464c224",
  "head_sha": "dfd464c2247a39903fcae6e71a338bd9150d90ce",
  "domain": {
    "sha": "39d380fc",
    "pull": "ok"
  },
  "risk": "N1",
  "risk_reasons": [
    "SDK public non publié, code généré + couche écrite à la main, additif; aucune zone critique de la table"
  ],
  "round": 1,
  "layers": {
    "code_review": "ran",
    "code_review_effort": "medium"
  },
  "verdicts": [
    {
      "rule": "ENG-001",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-002",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-003",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-004",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-005",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-006",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-007",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-008",
      "verdict": "respectée",
      "evidence": "le diff ajoute le client de routes déjà décrites par le domaine public-api ; aucune règle ne change, aucune décision dans le fil",
      "blocking": false
    },
    {
      "rule": "ENG-009",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-010",
      "verdict": "respectée",
      "evidence": "aucune version montée, aucun workflow de publication touché ; le corps dit que rien n'est publié",
      "blocking": false
    },
    {
      "rule": "ENG-011",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-012",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-013",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-014",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-015",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-016",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-017",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-018",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-019",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-020",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-021",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-022",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-023",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-024",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-025",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-026",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-027",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-028",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-029",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-030",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-031",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-032",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-033",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-034",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-035",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-036",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-037",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-038",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-039",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-040",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-041",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-042",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-043",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-044",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-045",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-046",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-047",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-048",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-049",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-050",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-051",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-052",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-053",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-054",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-055",
      "verdict": "respectée",
      "evidence": "aucun .md dans le diff",
      "blocking": false
    },
    {
      "rule": "ENG-056",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-057",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-058",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-059",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-060",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    },
    {
      "rule": "ENG-061",
      "verdict": "non applicable",
      "evidence": "hors champ (N0/N1)",
      "blocking": false
    }
  ],
  "correctness": [],
  "findings": [
    {
      "severity": "important",
      "file": "tests/test_client.py",
      "line": 360,
      "summary": "Suite : tester la conversion d'un datetime naïf et le filtre to pour customers"
    }
  ],
  "blocking": false,
  "status": "ready",
  "attestation": {
    "by": "write-review-section/2",
    "agent": "claude-code",
    "cr_review": {
      "at": "2026-10-21T20:30:12Z",
      "args": "https://github.com/controlresell/go-sdk/pull/4 https://github.com/controlresell/typescript-sdk/pull/5 https://github.com/controlresell/python-sdk/pull/4 https://github.com/controlresell/java-sdk/pull/"
    },
    "code_review": {
      "at": "2026-10-21T20:30:39Z",
      "args": "medium https://github.com/controlresell/python-sdk/pull/4"
    }
  }
}

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@nathanfallet
nathanfallet marked this pull request as ready for review October 21, 2026 20:33
@nathanfallet
nathanfallet merged commit 6da70df into main Oct 21, 2026
3 checks passed
@nathanfallet
nathanfallet deleted the feature/customers-route branch October 24, 2026 09:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant