Skip to content

docs(api): API reference docs umbrella (AGE-3734)#4314

Merged
mmabrouk merged 44 commits into
release/v0.99.7from
docs/age-3734-api-reference-epic
May 14, 2026
Merged

docs(api): API reference docs umbrella (AGE-3734)#4314
mmabrouk merged 44 commits into
release/v0.99.7from
docs/age-3734-api-reference-epic

Conversation

@mmabrouk
Copy link
Copy Markdown
Member

Summary

Umbrella PR aggregating the AGE-3734 API reference documentation effort. The 8 sub-PRs below base off this branch instead of main so that forward links between concept pages (versioning ↔ applications, workflows, evaluators, testsets, tracing, folders, evaluations) resolve during the Docusaurus build.

Each sub-PR contains a concept page plus the FastAPI handler docstrings and Field(description=...) updates for its domain. Style guide: .claude/skills/write-docs/SKILL.md. Project plan: tmp-docs-analysis/plan.md.

Sub-PRs

# PR Domain Status
PR-1 #4175 Versioning concept page Draft
PR-2 #4232 Applications Draft (CONFLICTING with umbrella)
PR-3 Evaluations Not yet opened
PR-4 #4178 Evaluators Draft (CONFLICTING with umbrella)
PR-5 #4233 Testsets Draft (CONFLICTING with umbrella)
PR-6 #4234 Workflows Draft (CONFLICTING with umbrella)
PR-7 #4235 Tracing Draft (CONFLICTING with umbrella)
PR-8 #4179 Folders Draft (CONFLICTING with umbrella)

Merge flow

  1. Sub-PRs base off this branch.
  2. Sub-PRs merge this branch in (not main) to stay current. As earlier sub-PRs land here, later ones pick them up.
  3. Approved sub-PRs merge into this branch (not main).
  4. When all sub-PRs are merged, this PR is promoted to ready and merged into main as one change.

Test plan

  • All sub-PRs merged into this branch
  • npm run build in docs/ passes with no broken-link errors
  • ruff format and ruff check clean in api/
  • Spot-check the rendered docs site once umbrella is complete

mmabrouk added 10 commits April 17, 2026 18:50
Introduce a shared concept page documenting the artifact / variant /
revision pattern used by applications, workflows, evaluators, and
testsets. Covers commit semantics, retrieval references, revision log,
and archive/unarchive.

Factors out a pattern that would otherwise have to be repeated in every
per-resource reference page. The applications, workflows, evaluators,
and testsets concept pages (landing in parallel PRs) link to this page
instead of redefining the model.
Adds the Evaluators concept page under the REST API guide and
annotates every evaluators endpoint and request/response model with
docstrings plus Field(description=...).

- New: docs/docs/reference/api-guide/07-evaluators.mdx
- Adds handler docstrings to EvaluatorsRouter and
  SimpleEvaluatorsRouter (catalog, artifact, variant, revision,
  deploy, resolve, simple CRUD, templates)
- Adds Field descriptions to every request/response schema in
  api/oss/src/apis/fastapi/evaluators/models.py

No behavior changes; no openapi_extra; no marketing words. Cross-links
to Versioning and Query Pattern guides.
- Add `docs/docs/reference/api-guide/05-applications.mdx` covering what an
  application is, versioning, invocation, deployment, simple vs structured
  endpoints, catalog, lifecycle, and an end-to-end worked example.
- Add docstrings to all 35 Applications FastAPI handlers (29 structured + 6
  simple), explaining what each endpoint does and when to pick it over a
  similar one.
- Add `Field(description=...)` to every field on the applications request and
  response models, including the catalog and simple-application models.
- Every endpoint was exercised against `eu.cloud.agenta.ai` before its
  docstring was written.
- Hooks skipped in sandbox; will be run locally before merge. No secrets
  in this PR (docs + docstrings only).
- Adds 08-testsets.mdx — concept page covering immutable testcases,
  the versioned-bag model, dedup paths (testcase_dedup_id /
  __dedup_id__ legacy), import/export, simple testsets, and pinning
  in evaluations.
- Adds Field descriptions on testsets/testcases models and docstrings
  on every router handler.
- Adds 06-workflows.mdx — concept page covering workflows as the
  versioned-logic primitive, when to pick workflows vs applications
  vs evaluators, the artifact/variant/revision model, and the
  shared shape with applications and evaluators.
- Adds Field descriptions on workflows models and docstrings on
  every router handler.
- Adds 10-tracing.mdx — concept page covering spans/traces, the
  invocation vs annotation trace types, span types, references vs
  links, the four ingestion paths with a decision tree, the async
  202 contract, the ag.* namespace (both wire formats), the
  ag.unsupported fallback, and the query focus mode.
- Adds Field descriptions across tracing/, traces/, otlp/ models
  and docstrings on every handler beyond the PR #4174 baseline.
- Note that revisions carry the payload, not just commit metadata.
- Add environments as a deployment pointer alongside artifact/variant/revision.
- Reference the existing /concepts/concepts overview page.
- Replace temperature-only example with a realistic application revision payload (prompt, messages, llm_config).
- Explain what a reference is (id, slug, slug+version) before describing retrieve precedence.
- Spell out "most specific wins" as revision > variant > environment.
- Rename "Revision log" to "Listing revision history" so the heading matches the verb pattern used by the other sections.
- Clarify the fork verb ties to POST /variants/fork.
Aggregates the 8 sub-PRs that add concept pages and endpoint docstrings
for the REST API reference. Sub-PRs base off this branch so forward
links (versioning <-> applications, workflows, evaluators, testsets,
tracing, folders, evaluations) resolve during docs build. When all
sub-PRs are merged into this branch, this PR merges into main.
@linear-code
Copy link
Copy Markdown

linear-code Bot commented May 11, 2026

AGE-3734

@vercel
Copy link
Copy Markdown

vercel Bot commented May 11, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
agenta-documentation Ready Ready Preview, Comment May 14, 2026 10:14am

Request Review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 11, 2026

Review Change Stack

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 0ac2d050-86e1-46a6-be59-e663642d3e30

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR modernizes Pydantic API model declarations across ten FastAPI subsystems by replacing bare field defaults with explicit Field(...) declarations including descriptions and safer default handling, adds comprehensive endpoint docstrings across all routers documenting request/response semantics and lifecycle behavior, and introduces six new API guide documentation pages covering versioning concepts and per-artifact functionality.

Changes

API Schema and Documentation Modernization

Layer / File(s) Summary
Applications: Model Fields, Router Docs, and API Guide
api/oss/src/apis/fastapi/applications/models.py, api/oss/src/apis/fastapi/applications/router.py, docs/docs/reference/api-guide/05-applications.mdx
Application artifact, variant, revision, and catalog models updated to use Field(...) with descriptions; applications router endpoint docstrings added explaining response scopes, reference resolution, and versioning semantics; comprehensive API guide documents application invocation flow, templates, presets, and deployment to environments.
Evaluators: Model Fields, Router Docs, and API Guide
api/oss/src/apis/fastapi/evaluators/models.py, api/oss/src/apis/fastapi/evaluators/router.py, docs/docs/reference/api-guide/07-evaluators.mdx
Evaluator artifact, variant, revision, template, and catalog models modernized with Field(...) and explicit defaults including default_factory=list for list payloads; evaluators router expanded with docstrings for CRUD, archive/unarchive, fork, deploy, and query operations; API guide covers evaluator execution, templates, presets, and annotation trace linkage.
Testsets & Testcases: Model Fields, Router Docs, and API Guide
api/oss/src/apis/fastapi/testsets/models.py, api/oss/src/apis/fastapi/testcases/models.py, api/oss/src/apis/fastapi/testsets/router.py, docs/docs/reference/api-guide/08-testsets.mdx
Testsets and testcases models updated to use Field(...) for create/edit/query/response DTOs with explicit defaults and descriptions, mutable list defaults replaced with default_factory=list; testsets router docstrings added for artifact, variant, and revision operations; API guide documents testcase payload shape, deduplication, import/export, and retrieval semantics.
Traces: Model Fields and Router Docs
api/oss/src/apis/fastapi/traces/models.py, api/oss/src/apis/fastapi/traces/router.py
SimpleTrace request/response models updated to Field(...) declarations with explicit defaults and descriptions; traces router docstrings added for create, fetch, edit, delete, and query endpoints clarifying single-trace vs span-level operations.
Tracing: Model Fields, Router Docs, and API Guide
api/oss/src/apis/fastapi/tracing/models.py, api/oss/src/apis/fastapi/tracing/router.py, docs/docs/reference/api-guide/10-tracing.mdx
Tracing ingestion/query/analytics models comprehensively refactored to Field(...) with descriptions, OTelLinksResponse updated with dropped field removal, AnalyticsResponse.query changed to default_factory=TracingQuery; tracing router docstrings added across ingestion, query, analytics, and sessions endpoints; detailed API guide covers span/trace model, ag.\* namespace, references vs OTel links, and ingestion/query semantics.
Workflows: Model Fields, Router Docs, and API Guide
api/oss/src/apis/fastapi/workflows/models.py, api/oss/src/apis/fastapi/workflows/router.py, docs/docs/reference/api-guide/06-workflows.mdx
Workflow artifact, variant, revision, and catalog models updated to Field(...) with descriptions and explicit defaults; workflows router expanded with docstrings for catalog lookups and CRUD operations; API guide documents workflow data payload structure, invocation flow, reference resolution, templates, simple endpoints, and versioning.
Folders & OTLP: Model Fields, Core Types, Router Docs, and API Guides
api/oss/src/apis/fastapi/folders/models.py, api/oss/src/apis/fastapi/folders/router.py, api/oss/src/apis/fastapi/otlp/models.py, api/oss/src/apis/fastapi/otlp/router.py, api/oss/src/core/folders/types.py, docs/docs/reference/api-guide/11-folders.mdx
Folders request/response models and core type definitions updated to Field(...) with descriptions, FoldersResponse.folders changed to default_factory=list; OTLP CollectStatusResponse updated with Field(...) status field; folders and OTLP routers expanded with endpoint docstrings; API guides document folder hierarchy, operations, and OTLP readiness/ingestion contracts.
Versioning Concepts and Shared API Guide
docs/docs/reference/api-guide/04-versioning.mdx
New comprehensive API guide page documenting the artifact/variant/revision hierarchy shared across applications, workflows, evaluators, and testsets, including commit flow with immutability, revision retrieval with reference resolution, history logs, and archive/unarchive soft-delete with include_archived query filtering.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title 'docs(api): API reference docs umbrella (AGE-3734)' accurately and clearly describes the main change: an umbrella PR aggregating API reference documentation effort across multiple domains.
Description check ✅ Passed The description comprehensively explains the umbrella PR's purpose, structure, sub-PR breakdown, merge flow, and test plan, providing clear context about the aggregated documentation effort.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 60.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/age-3734-api-reference-epic

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


Comment @coderabbitai help to get the list of available commands and usage tips.

mmabrouk added 2 commits May 11, 2026 20:19
The ag_config wrapper was removed by migration 91d3b4a8c27f_fix_ag_config
(2025-04-24); revision payloads now live under data.parameters directly.
Verified against eu.cloud.agenta.ai: posting with the old ag_config
envelope returns HTTP 200 but stores data: {} because extra fields are
silently dropped. The corrected shape (data.parameters.prompt.*) stores
the payload correctly.
mmabrouk added 6 commits May 11, 2026 20:30
…plications-endpoints

Resolve conflict in api/oss/src/apis/fastapi/applications/models.py: response
envelopes now extend the new Support base class (from
oss.src.utils.exceptions) while keeping the documentation docstrings and
Field(description=...) introduced on this branch.

No conflicts elsewhere. Router and concept page pick up cleanly from main.
…lders-endpoints

Bring in main + the landed versioning concept page so the folders PR can
ship on top of the umbrella branch.

Conflict resolution:
- api/oss/src/apis/fastapi/folders/models.py: the umbrella switched the
  three response models (FolderResponse, FoldersResponse, FolderIdResponse)
  to inherit from `Support` so they carry support_id / support_ts. Combined
  with the Field(description=...) annotations from this branch.
Run pnpm clean-api-docs && pnpm gen-api-docs to refresh the generated
*.api.mdx pages against the current openapi.json. Picks up the support_id
/ support_ts fields on response envelopes and other minor regen drift.
`POST /applications/variants/fork` now raises `400 Bad Request` when the
fork target is invalid (introduced in 77cb317 "workflow-related fork
issues"). Add a short note to the handler docstring so the generated
OpenAPI reflects the failure mode. No behavioral change.
Drop the docs/docs/reference/api/*.api.mdx regeneration from this PR.
Those files are auto-generated from openapi.json and produce a lot of
noise in domain PRs. They will be regenerated at a later stage in the
workflow, once openapi.json itself is updated from the branch code
(not from production, which is what update-api-docs does by default).

Leaves the actual docstring + Field(description=...) changes in
api/oss/src/apis/fastapi/folders/ intact.
docs(api): folders endpoint docstrings + concept page
mmabrouk added 3 commits May 11, 2026 21:04
Rewrites the intro to lead with the customer-facing model (chat /
completion endpoint), introduces the built-in application types up
front, and links custom workflows as another kind of application.
Splits the `data` payload section so `uri` + `schemas` are explained
as drivers of execution before the catalog is referenced. Removes
remaining em dashes.
…dpoints

docs(api): applications endpoint docstrings + concept page
mmabrouk added 2 commits May 13, 2026 15:39
Resolve conflicts in testsets/models.py and testcases/models.py:
- Keep Field(description=...) annotations from HEAD
- Adopt Support base class from umbrella for response envelopes
- Add Support import to both modules
Resolves Support-mixin conflicts in api/oss/src/apis/fastapi/evaluators/models.py
by keeping the docstrings and Field(description=...) descriptions while adopting
the umbrella's Support base class on 16 response envelopes.

Reverts auto-generated docs/docs/reference/api/ changes per write-docs §8.
The auto-regen is handled separately, downstream of the openapi.json update.
The evaluations concept page (PR-3 in the AGE-3734 plan) has not landed
yet. Three pages (evaluators, testsets, tracing) link forward to
/reference/api-guide/evaluations, which fails the Docusaurus broken-link
check.

For now, drop the link syntax on those three references. Two become
plain bold text; the tracing cross-ref folds the pointer into a plain
sentence. Restore the links in the evaluations PR when it lands.
@mmabrouk mmabrouk marked this pull request as ready for review May 13, 2026 19:21
@dosubot dosubot Bot added size:XXL This PR changes 1000+ lines, ignoring generated files. documentation Improvements or additions to documentation labels May 13, 2026
@mmabrouk mmabrouk changed the base branch from main to release/v0.99.7 May 13, 2026 19:21
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 13, 2026

Railway Preview Environment

Status Destroyed (PR closed)

Updated at 2026-05-14T10:13:54.899Z

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
api/oss/src/apis/fastapi/traces/models.py (1)

92-95: ⚡ Quick win

Use default_factory=list for traces field.

Pydantic v2 recommends default_factory=list over default=[] for mutable defaults to avoid unintended side effects and schema issues. Most API models in this codebase already follow this pattern.

Suggested change
-    traces: List[SimpleTrace] = Field(
-        default=[],
+    traces: List[SimpleTrace] = Field(
+        default_factory=list,
         description="The matching traces in the high-level `SimpleTrace` shape.",
     )

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: aa2d086e-d76b-4208-8ea4-0172806446f7

📥 Commits

Reviewing files that changed from the base of the PR and between 5200b03 and 12708e8.

📒 Files selected for processing (25)
  • api/oss/src/apis/fastapi/applications/models.py
  • api/oss/src/apis/fastapi/applications/router.py
  • api/oss/src/apis/fastapi/evaluators/models.py
  • api/oss/src/apis/fastapi/evaluators/router.py
  • api/oss/src/apis/fastapi/folders/models.py
  • api/oss/src/apis/fastapi/folders/router.py
  • api/oss/src/apis/fastapi/otlp/models.py
  • api/oss/src/apis/fastapi/otlp/router.py
  • api/oss/src/apis/fastapi/testcases/models.py
  • api/oss/src/apis/fastapi/testsets/models.py
  • api/oss/src/apis/fastapi/testsets/router.py
  • api/oss/src/apis/fastapi/traces/models.py
  • api/oss/src/apis/fastapi/traces/router.py
  • api/oss/src/apis/fastapi/tracing/models.py
  • api/oss/src/apis/fastapi/tracing/router.py
  • api/oss/src/apis/fastapi/workflows/models.py
  • api/oss/src/apis/fastapi/workflows/router.py
  • api/oss/src/core/folders/types.py
  • docs/docs/reference/api-guide/04-versioning.mdx
  • docs/docs/reference/api-guide/05-applications.mdx
  • docs/docs/reference/api-guide/06-workflows.mdx
  • docs/docs/reference/api-guide/07-evaluators.mdx
  • docs/docs/reference/api-guide/08-testsets.mdx
  • docs/docs/reference/api-guide/10-tracing.mdx
  • docs/docs/reference/api-guide/11-folders.mdx

Comment thread api/oss/src/apis/fastapi/evaluators/models.py
Comment thread api/oss/src/apis/fastapi/tracing/router.py
Comment thread docs/docs/reference/api-guide/05-applications.mdx Outdated
Comment thread api/oss/src/apis/fastapi/applications/models.py Outdated
Comment thread api/oss/src/apis/fastapi/applications/models.py Outdated
Comment thread api/oss/src/apis/fastapi/otlp/router.py
Comment thread docs/docs/reference/api-guide/04-versioning.mdx Outdated
Comment thread docs/docs/reference/api-guide/08-testsets.mdx Outdated
Comment thread docs/docs/reference/api-guide/10-tracing.mdx Outdated
Comment thread docs/docs/reference/api-guide/10-tracing.mdx
@ashrafchowdury
Copy link
Copy Markdown
Contributor

ashrafchowdury commented May 14, 2026

Nice explanation, thank you for that @mmabrouk

It would be better if we had a description within each of the api references page, so that we don't have to look for an explanation - good for both human an agents.

But this is good as well

@mmabrouk
Copy link
Copy Markdown
Member Author

@ashrafchowdury the docstring will be autogenerated after merge into an update api reference doc

Documentation:
- 04-versioning.mdx: include environments in the shared versioning model
  per JP's note on the intro.
- 05-applications.mdx: replace the JS-style placeholder comment in the
  final invoke example with valid JSON plus an inline note (CodeRabbit).
- 10-tracing.mdx: rewrite the trace-types table so annotations are
  evaluator-produced as well as human-produced; add an :::info block
  showing the fields that identify each type (JP + mmabrouk on L93).
- 10-tracing.mdx: mark `/tracing/spans/ingest`, `/tracing/traces/query`,
  `/tracing/spans/query`, and `/traces/ingest` as deprecated; point
  callers to `/otlp/v1/traces`, `/simple/traces/`, `/spans/query`, and
  `/traces/query`. Drop the deprecated nested-trace curl example and
  point to the SDK / OTel collector setup instead (JP on L108).

API metadata (no behaviour change):
- applications/models.py: reword the edit Field descriptions on
  ApplicationVariantEditRequest and ApplicationRevisionEditRequest. Edit
  is a full PUT; documenting it as "fields to update" is misleading
  (JP on models.py:197 and 287).
- evaluators/models.py, workflows/models.py, testsets/models.py: drop
  the "Defaults to false" wording on the `include_archived` Field
  descriptions. The schema default is null, not false (CodeRabbit on
  evaluators/models.py:85 and the same pattern across the three
  domains).
- tracing/router.py: apply `deprecated=True` to the remaining
  TracingRouter routes (`/spans/query`, `/analytics/query`, `/traces/*`,
  `/sessions/query`, `/users/query`). The pattern was already in place
  for `/spans/ingest`; this just propagates it.

Out of scope here:
- The count-semantics bug at tracing/router.py:296 (CodeRabbit) is a
  business-logic change. Filed as AGE-3758 and intentionally left
  untouched in this docs PR.
@mmabrouk
Copy link
Copy Markdown
Member Author

Review pass: changes summary

Addressed feedback from @jp-agenta, @ashrafchowdury, and coderabbitai across 10 threads. Per-thread responses are inline above. Below is the rolled-up list of what landed in commit 1e7c9e8c9.

Documentation

  • 04-versioning.mdx: include environments in the shared versioning model (intro list and payload list).
  • 05-applications.mdx: replace the JS-style /* from step 3 */ placeholder in the final invoke example with valid JSON ("parameters": {}) plus an inline comment.
  • 10-tracing.mdx:
    • Trace types: reword the annotation row so it covers both evaluator-produced and human-produced annotations.
    • Add an :::info block under Trace types listing the fields that identify each type (ag.type.trace, plus links/ag.references on annotations).
    • "How evaluations weave traces together": evaluator execution now correctly produces an annotation trace that links back to the invocation it scored.
    • Ingestion section: drop the deprecated nested-ingest curl example; add a :::warning listing /tracing/spans/ingest and /traces/ingest as deprecated; lead with the supported endpoints /otlp/v1/traces and /simple/traces/; point readers to the SDK and OTel exporter docs for programmatic ingestion.
    • Querying section: list /traces/query and /spans/query as the supported paths and call the /tracing/* aliases deprecated.

API metadata (no behaviour change)

  • applications/models.py: reword the Field(description=...) on ApplicationVariantEditRequest and ApplicationRevisionEditRequest to state that edit is a full PUT, every editable field is required, and slug (variant) / data, author, date, message (revision) are immutable.
  • evaluators/models.py, workflows/models.py, testsets/models.py: drop the Defaults to false wording on every include_archived Field description (11 occurrences). The schema default is null, which means "no filter on the flag", not false.
  • tracing/router.py: apply deprecated=True to the remaining TracingRouter routes (/spans/query, /analytics/query, /traces/ POST + /traces/{trace_id} GET/PUT/DELETE, /sessions/query, /users/query). /spans/ingest and /traces/ingest already had it; this propagates the same pattern across the rest of the deprecated namespace.

Held for separate follow-up

  • AGE-3758OTelLinksResponse.count over-counts and references a removed dropped field on /tracing/spans/ingest. CodeRabbit flagged this in the count-semantics thread; it is a business-logic change with its own test surface, so the docs PR does not touch it. Filed here with the repro and proposed fix.
  • __dedup_id__ deprecation on 08-testsets.mdx@mmabrouk asked for the reasoning before editing. Research findings posted in the thread; awaiting confirmation before rewording the section.

Drop the "deprecated" framing on `__dedup_id__`. Per @jp-agenta on
#4314 (08-testsets.mdx:35), the `legacy_` prefix in the input
normalisation code is unfortunate naming; the field is not deprecated.

- `data.testcase_dedup_id` is the JSON-payload key (commits, SDK).
- `__dedup_id__` is the metadata-column key, alongside `__id__`,
  `__flags__`, `__tags__`, and `__meta__`, used by CSV uploads and
  downloads.

Both round-trip through the server's normalisation, so callers can
commit through one path and download through the other and the dedup
ID stays consistent.

Also add `__dedup_id__` to the metadata-column list in the
Import and export section so the family of `__X__` columns is
documented in one place.
@mmabrouk mmabrouk merged commit f847908 into release/v0.99.7 May 14, 2026
17 of 18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size:XXL This PR changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants