Skip to content

Implement issue management#2043

Merged
mrobers1982 merged 1 commit intodevelopfrom
pnoirel/PLT-2586-issue-management
Mar 18, 2026
Merged

Implement issue management#2043
mrobers1982 merged 1 commit intodevelopfrom
pnoirel/PLT-2586-issue-management

Conversation

@lb-pno
Copy link
Contributor

@lb-pno lb-pno commented Feb 12, 2026

Description

Adds full programmatic support for Issues, Comments, and Issue Categories. Issues can be pinned to specific data row locations (Image, PDF, Text, Video).

Usage Example

This is the standard flow for most users:

project = client.get_project("<ID>")

# Create a category and an issue pinned to an image
cat = project.create_issue_category(name="Quality", description="Quality-related issues")
issue = project.create_issue(
    content="Misaligned box",
    data_row_id="<DR_ID>",
    category_id=cat.id,
    position=ImageIssuePosition(x=100, y=200)
)

# Comment and Resolve
issue.create_comment(content="Acknowledged.")
issue.resolve()

Deep Dive: All Supported Positions

Click to see exhaustive examples for PDF, Text, and Video
# PDF (%)
PdfIssuePosition(x=0.5, y=0.75, page=2)

# Text (Char range)
TextIssuePosition(text_block_id="b1", start_char_index=10, end_char_index=25)

# Video (Multiple frames/paths)
VideoIssuePosition(frames=[
    VideoFrameRange(start=5, end=11, x=450, y=300, end_x=500, end_y=350),
    VideoFrameRange(start=20, end=25, x=100, y=100)
])

Implementation Note

Used Pydantic (_CamelCaseMixin) instead of DbObject because the backend GraphQL mutations for Issues use typed input objects incompatible with the legacy ORM's auto-generation.

Fixes # (issue)

Type of change

Please delete options that are not relevant.

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Document change (fix typo or modifying any markdown files, code comments or anything in the examples folder only)

All Submissions

  • Have you followed the guidelines in our Contributing document?
  • Have you provided a description?
  • Are your changes properly formatted?

New Feature Submissions

  • Does your submission pass tests?
  • Have you added thorough tests for your new feature?
  • Have you commented your code, particularly in hard-to-understand areas?
  • Have you added a Docstring?

Changes to Core Features

  • Have you written new tests for your core changes, as applicable?
  • Have you successfully run tests with your changes locally?
  • Have you updated any code comments, as applicable?

Note

Medium Risk
Adds new GraphQL mutation/query flows (mostly experimental=True) and new typed position serialization/deserialization, so failures would primarily be API/compatibility issues rather than affecting existing flows.

Overview
Adds first-class Issue Management APIs to the Python SDK. Projects can now create_issue, get_issues (cursor-paginated with filters), get_issue, and delete_issues, while Issue objects support update, resolve/reopen, delete, and comment CRUD (create_comment, comments, Comment.update, Comment.delete).

Introduces typed issue pinning via new IssuePosition models for image/PDF/text/video (with serialization + deserialization), plus IssueCategory CRUD and new Sphinx docs and exports in labelbox.__init__. Includes comprehensive unit + integration test coverage for the new GraphQL-backed workflows (all marked experimental=True).

Written by Cursor Bugbot for commit c6f03f4. This will update automatically on new commits. Configure here.

Loading
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.

2 participants