Skip to content

feat: regenerate with the from/to filters and the orders labels route - #3

Merged
nathanfallet merged 2 commits into
mainfrom
feature/regen-dates-and-labels-route
Oct 21, 2026
Merged

nathanfallet merged 2 commits into
mainfrom
feature/regen-dates-and-labels-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.98.0), with scripts/generate.sh. No manual edit of generated code.
  • New in the API since the last regeneration (API 2.95.0): the from/to window on GET /conversations (last message) and GET /conversations/{id}/messages (from inclusive, to exclusive, ISO-8601 with an offset; API 2.96.0, parser PublicDateWindow.kt), and GET /orders/labels, the labels still to ship over all the orders (backend PR guimauvedigital/controlresell-backend#1497, API 2.98.0, rule API-024 of the public-api domain). OrderLabel now carries orderId.
  • Hand-written layer: orders.labels_to_ship and orders.iter_labels_to_ship; from_/to on conversations.list, iter, messages, iter_messages (naive datetime read as UTC, like orders).

Validation

pytest: 23 tests pass (2 new).

Not done

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

Revue automatique (cr-review)

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

{
  "schema": "cr-review/1",
  "repo": "python-sdk",
  "pr": 3,
  "head": "b2ac9abde4",
  "head_sha": "b2ac9abde4224284120bcddee434ed2073c8c854",
  "domain": {
    "sha": "763c3f4f",
    "pull": "ok"
  },
  "risk": "N1",
  "risk_reasons": [
    "SDK public non publié, code généré + couche écrite à la main, additif ou changement avant la première release; 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 deux champs et d une route déjà décrits par API-024 (domains/public-api/business-rules.md) ; aucune règle du domaine 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 (README laissé tel quel, commit « Leave the README alone »)",
      "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": "src/controlresell/client.py",
      "line": 303,
      "summary": "Suite : typer iter_messages en Iterator[Message] plutôt que Iterator[Any] (hors diff, existant)"
    },
    {
      "severity": "important",
      "file": "tests/test_client.py",
      "line": 319,
      "summary": "Suite : un test de orders.labels(id) avec orderId, et des UUID distincts pour id et orderId"
    },
    {
      "severity": "important",
      "file": "src/controlresell/client.py",
      "line": 365,
      "summary": "Suite : mentionner dans la docstring de labels_to_ship que les liens signés expirent"
    }
  ],
  "blocking": false,
  "status": "ready",
  "attestation": {
    "by": "write-review-section/2",
    "agent": "claude-code",
    "cr_review": {
      "at": "2026-10-21T16:50:20Z",
      "args": "https://github.com/controlresell/python-sdk/pull/3 https://github.com/controlresell/go-sdk/pull/3 https://github.com/controlresell/java-sdk/pull/3 https://github.com/controlresell/kotlin-sdk/pull/5 (N"
    },
    "code_review": {
      "at": "2026-10-21T16:47:00Z",
      "args": "medium https://github.com/controlresell/python-sdk/pull/3"
    }
  }
}

@nathanfallet
nathanfallet marked this pull request as ready for review October 21, 2026 16:52
@nathanfallet
nathanfallet merged commit cdfd51e into main Oct 21, 2026
3 checks passed
@nathanfallet
nathanfallet deleted the feature/regen-dates-and-labels-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