[GH-ISSUE #85] Add review submissions + review items management #30

Closed
opened 2026-02-26 21:32:52 +03:00 by kerem · 2 comments
Owner

Originally created by @rudrankriyam on GitHub (Jan 24, 2026).
Original GitHub issue: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues/85

Summary

Add App Store review submission management and review submission items support.

API Endpoints

  • GET|POST /v1/reviewSubmissions
  • GET|PATCH /v1/reviewSubmissions/{id}
  • GET /v1/apps/{id}/reviewSubmissions
  • POST /v1/reviewSubmissionItems
  • PATCH|DELETE /v1/reviewSubmissionItems/{id}
  • GET /v1/reviewSubmissions/{id}/items

Proposed CLI (brainstorm)

asc review-submissions list --app APP_ID
asc review-submissions get --id SUBMISSION_ID
asc review-submissions create --app APP_ID --version VERSION_ID
asc review-submissions submit --id SUBMISSION_ID --confirm

asc review-items add --submission SUBMISSION_ID --item-type APP_STORE_VERSION --item-id VERSION_ID
asc review-items remove --id ITEM_ID --confirm
asc review-items list --submission SUBMISSION_ID

Behavior (brainstorm)

  • Provide a clear JSON summary including submission state, items, and relationships.
  • Ensure submission state transitions are explicit and safe (confirm flag).

Implementation Plan

  1. internal/asc/review_submissions.go + review_submission_items.go.
  2. Commands review-submissions and review-items.
  3. Output formatting for submissions + items.

Tests

  • CLI validation for required IDs.
  • Client tests for POST/PATCH/DELETE flows.

Acceptance Criteria

  • Can create, list, and submit review submissions.
  • Can add/remove/list review submission items.
  • JSON output by default; table/markdown supported.
Originally created by @rudrankriyam on GitHub (Jan 24, 2026). Original GitHub issue: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues/85 ## Summary Add App Store review submission management and review submission items support. ## API Endpoints - `GET|POST /v1/reviewSubmissions` - `GET|PATCH /v1/reviewSubmissions/{id}` - `GET /v1/apps/{id}/reviewSubmissions` - `POST /v1/reviewSubmissionItems` - `PATCH|DELETE /v1/reviewSubmissionItems/{id}` - `GET /v1/reviewSubmissions/{id}/items` ## Proposed CLI (brainstorm) ``` asc review-submissions list --app APP_ID asc review-submissions get --id SUBMISSION_ID asc review-submissions create --app APP_ID --version VERSION_ID asc review-submissions submit --id SUBMISSION_ID --confirm asc review-items add --submission SUBMISSION_ID --item-type APP_STORE_VERSION --item-id VERSION_ID asc review-items remove --id ITEM_ID --confirm asc review-items list --submission SUBMISSION_ID ``` ## Behavior (brainstorm) - Provide a clear JSON summary including submission state, items, and relationships. - Ensure submission state transitions are explicit and safe (confirm flag). ## Implementation Plan 1) `internal/asc/review_submissions.go` + `review_submission_items.go`. 2) Commands `review-submissions` and `review-items`. 3) Output formatting for submissions + items. ## Tests - CLI validation for required IDs. - Client tests for POST/PATCH/DELETE flows. ## Acceptance Criteria - Can create, list, and submit review submissions. - Can add/remove/list review submission items. - JSON output by default; table/markdown supported.
kerem closed this issue 2026-02-26 21:32:52 +03:00
Author
Owner

@rudrankriyam commented on GitHub (Jan 24, 2026):

@cursor

Implementation Guide

Codebase Context

This feature adds review submission management, which is different from the existing submit command (which uses the older appStoreVersionSubmissions endpoint). The new reviewSubmissions API provides more granular control over what is included in a submission.

Difference from Existing Submit

  • Current asc submit: Uses POST /v1/appStoreVersionSubmissions - submits a single version
  • New reviewSubmissions: Allows bundling multiple items (versions, events, custom product pages) into a single review

File Structure

1. internal/asc/review_submissions.go (~150-200 lines)

// Review Submission types
type ReviewSubmissionAttributes struct {
    Platform        Platform `json:"platform"`
    SubmissionState string   `json:"state"` // READY_FOR_REVIEW, WAITING_FOR_REVIEW, IN_REVIEW, etc.
    SubmittedDate   string   `json:"submittedDate,omitempty"`
}

type ReviewSubmissionItemAttributes struct {
    State          string `json:"state,omitempty"` // READY_FOR_REVIEW, ACCEPTED, APPROVED, REJECTED, etc.
    // Relationship data indicates what kind of item
}

// Item types that can be added to a submission
type ReviewSubmissionItemType string

const (
    ReviewSubmissionItemTypeAppStoreVersion      ReviewSubmissionItemType = "appStoreVersions"
    ReviewSubmissionItemTypeAppCustomProductPage ReviewSubmissionItemType = "appCustomProductPages"
    ReviewSubmissionItemTypeAppEvent             ReviewSubmissionItemType = "appEvents"
    ReviewSubmissionItemTypeAppStoreVersionExperiment ReviewSubmissionItemType = "appStoreVersionExperiments"
    ReviewSubmissionItemTypeAppStoreVersionExperimentTreatment ReviewSubmissionItemType = "appStoreVersionExperimentTreatments"
)

// Response types
type ReviewSubmissionsResponse = Response[ReviewSubmissionAttributes]
type ReviewSubmissionResponse = SingleResponse[ReviewSubmissionAttributes]
type ReviewSubmissionItemsResponse = Response[ReviewSubmissionItemAttributes]
type ReviewSubmissionItemResponse = SingleResponse[ReviewSubmissionItemAttributes]

2. internal/asc/client_review_submissions.go (~150-200 lines)

// Review Submissions
func (c *Client) GetReviewSubmissions(ctx context.Context, appID string, opts ...ReviewSubmissionsOption) (*ReviewSubmissionsResponse, error)
func (c *Client) GetReviewSubmission(ctx context.Context, submissionID string) (*ReviewSubmissionResponse, error)
func (c *Client) CreateReviewSubmission(ctx context.Context, platform Platform, appID string) (*ReviewSubmissionResponse, error)
func (c *Client) UpdateReviewSubmission(ctx context.Context, submissionID string, attrs ReviewSubmissionUpdateAttributes) (*ReviewSubmissionResponse, error)

// Note: Submitting is done via PATCH with state transition
// PATCH body: { "data": { "attributes": { "submitted": true } } }
func (c *Client) SubmitReviewSubmission(ctx context.Context, submissionID string) (*ReviewSubmissionResponse, error)

// Review Submission Items
func (c *Client) GetReviewSubmissionItems(ctx context.Context, submissionID string) (*ReviewSubmissionItemsResponse, error)
func (c *Client) CreateReviewSubmissionItem(ctx context.Context, submissionID string, itemType ReviewSubmissionItemType, itemID string) (*ReviewSubmissionItemResponse, error)
func (c *Client) UpdateReviewSubmissionItem(ctx context.Context, itemID string, attrs ReviewSubmissionItemUpdateAttributes) (*ReviewSubmissionItemResponse, error)
func (c *Client) DeleteReviewSubmissionItem(ctx context.Context, itemID string) error

3. internal/asc/review_submissions_output.go (~100 lines)

func printReviewSubmissionsTable(resp *ReviewSubmissionsResponse) error
func printReviewSubmissionsMarkdown(resp *ReviewSubmissionsResponse) error
func printReviewSubmissionItemsTable(resp *ReviewSubmissionItemsResponse) error
func printReviewSubmissionItemsMarkdown(resp *ReviewSubmissionItemsResponse) error

4. cmd/review_submissions.go (~300-350 lines)

func ReviewSubmissionsCommand() *ffcli.Command {
    return &ffcli.Command{
        Name:       "review-submissions",
        ShortUsage: "asc review-submissions <subcommand> [flags]",
        ShortHelp:  "Manage App Store review submissions.",
        LongHelp: `Manage App Store review submissions.

Review submissions can include multiple items: app versions, custom product pages, 
in-app events, and experiments.

Examples:
  asc review-submissions list --app APP_ID
  asc review-submissions create --app APP_ID --platform IOS
  asc review-submissions submit --id SUBMISSION_ID --confirm`,
        UsageFunc: DefaultUsageFunc,
        Subcommands: []*ffcli.Command{
            ReviewSubmissionsListCommand(),
            ReviewSubmissionsGetCommand(),
            ReviewSubmissionsCreateCommand(),
            ReviewSubmissionsSubmitCommand(),
        },
        Exec: func(ctx context.Context, args []string) error {
            return flag.ErrHelp
        },
    }
}

func ReviewSubmissionsListCommand() *ffcli.Command {
    fs := flag.NewFlagSet("review-submissions list", flag.ExitOnError)

    appID := fs.String("app", "", "App ID (required)")
    platform := fs.String("platform", "", "Filter by platform: IOS, MAC_OS, TV_OS, VISION_OS")
    state := fs.String("state", "", "Filter by state")
    limit := fs.Int("limit", 0, "Maximum results per page")
    paginate := fs.Bool("paginate", false, "Fetch all pages")
    output := fs.String("output", "json", "Output format")
    pretty := fs.Bool("pretty", false, "Pretty-print JSON")

    // ...
}

func ReviewSubmissionsCreateCommand() *ffcli.Command {
    fs := flag.NewFlagSet("review-submissions create", flag.ExitOnError)

    appID := fs.String("app", "", "App ID (required)")
    platform := fs.String("platform", "IOS", "Platform: IOS, MAC_OS, TV_OS, VISION_OS")
    output := fs.String("output", "json", "Output format")
    pretty := fs.Bool("pretty", false, "Pretty-print JSON")

    // ...
}

func ReviewSubmissionsSubmitCommand() *ffcli.Command {
    fs := flag.NewFlagSet("review-submissions submit", flag.ExitOnError)

    submissionID := fs.String("id", "", "Review submission ID (required)")
    confirm := fs.Bool("confirm", false, "Confirm submission (required)")
    output := fs.String("output", "json", "Output format")
    pretty := fs.Bool("pretty", false, "Pretty-print JSON")

    // Validation: require --confirm
    // ...
}

5. cmd/review_items.go (~200-250 lines)

func ReviewItemsCommand() *ffcli.Command {
    return &ffcli.Command{
        Name:       "review-items",
        ShortUsage: "asc review-items <subcommand> [flags]",
        ShortHelp:  "Manage review submission items.",
        LongHelp: `Manage items within a review submission.

Items can be app versions, custom product pages, in-app events, or experiments.

Examples:
  asc review-items list --submission SUBMISSION_ID
  asc review-items add --submission SUBMISSION_ID --item-type appStoreVersions --item-id VERSION_ID
  asc review-items remove --id ITEM_ID --confirm`,
        UsageFunc: DefaultUsageFunc,
        Subcommands: []*ffcli.Command{
            ReviewItemsListCommand(),
            ReviewItemsAddCommand(),
            ReviewItemsRemoveCommand(),
        },
        Exec: func(ctx context.Context, args []string) error {
            return flag.ErrHelp
        },
    }
}

func ReviewItemsAddCommand() *ffcli.Command {
    fs := flag.NewFlagSet("review-items add", flag.ExitOnError)

    submissionID := fs.String("submission", "", "Review submission ID (required)")
    itemType := fs.String("item-type", "", "Item type: appStoreVersions, appCustomProductPages, appEvents (required)")
    itemID := fs.String("item-id", "", "Item ID (required)")
    output := fs.String("output", "json", "Output format")
    pretty := fs.Bool("pretty", false, "Pretty-print JSON")

    // ...
}

func ReviewItemsRemoveCommand() *ffcli.Command {
    fs := flag.NewFlagSet("review-items remove", flag.ExitOnError)

    itemID := fs.String("id", "", "Review submission item ID (required)")
    confirm := fs.Bool("confirm", false, "Confirm removal (required)")
    output := fs.String("output", "json", "Output format")
    pretty := fs.Bool("pretty", false, "Pretty-print JSON")

    // ...
}

6. Register in cmd/commands.go
Add ReviewSubmissionsCommand() and ReviewItemsCommand() to RootCommand().Subcommands

API Endpoints Reference

Review Submissions:
GET    /v1/apps/{id}/reviewSubmissions                   → GetReviewSubmissions
POST   /v1/reviewSubmissions                             → CreateReviewSubmission
GET    /v1/reviewSubmissions/{id}                        → GetReviewSubmission
PATCH  /v1/reviewSubmissions/{id}                        → UpdateReviewSubmission / SubmitReviewSubmission

Review Submission Items:
GET    /v1/reviewSubmissions/{id}/items                  → GetReviewSubmissionItems
POST   /v1/reviewSubmissionItems                         → CreateReviewSubmissionItem
PATCH  /v1/reviewSubmissionItems/{id}                    → UpdateReviewSubmissionItem
DELETE /v1/reviewSubmissionItems/{id}                    → DeleteReviewSubmissionItem

CLI Usage Examples

# List review submissions for an app
asc review-submissions list --app "123456789"

# Create a new review submission
asc review-submissions create --app "123456789" --platform IOS

# Add an app version to the submission
asc review-items add --submission "SUBMISSION_ID" --item-type appStoreVersions --item-id "VERSION_ID"

# Add a custom product page
asc review-items add --submission "SUBMISSION_ID" --item-type appCustomProductPages --item-id "CPP_ID"

# List items in a submission
asc review-items list --submission "SUBMISSION_ID"

# Submit for review
asc review-submissions submit --id "SUBMISSION_ID" --confirm

# Remove an item
asc review-items remove --id "ITEM_ID" --confirm

Testing

  • Run make test && make lint
  • Test submission requires --confirm
  • Test item type validation
<!-- gh-comment-id:3795331310 --> @rudrankriyam commented on GitHub (Jan 24, 2026): @cursor ## Implementation Guide ### Codebase Context This feature adds review submission management, which is different from the existing `submit` command (which uses the older `appStoreVersionSubmissions` endpoint). The new `reviewSubmissions` API provides more granular control over what is included in a submission. ### Difference from Existing Submit - **Current `asc submit`**: Uses `POST /v1/appStoreVersionSubmissions` - submits a single version - **New `reviewSubmissions`**: Allows bundling multiple items (versions, events, custom product pages) into a single review ### File Structure **1. `internal/asc/review_submissions.go`** (~150-200 lines) ```go // Review Submission types type ReviewSubmissionAttributes struct { Platform Platform `json:"platform"` SubmissionState string `json:"state"` // READY_FOR_REVIEW, WAITING_FOR_REVIEW, IN_REVIEW, etc. SubmittedDate string `json:"submittedDate,omitempty"` } type ReviewSubmissionItemAttributes struct { State string `json:"state,omitempty"` // READY_FOR_REVIEW, ACCEPTED, APPROVED, REJECTED, etc. // Relationship data indicates what kind of item } // Item types that can be added to a submission type ReviewSubmissionItemType string const ( ReviewSubmissionItemTypeAppStoreVersion ReviewSubmissionItemType = "appStoreVersions" ReviewSubmissionItemTypeAppCustomProductPage ReviewSubmissionItemType = "appCustomProductPages" ReviewSubmissionItemTypeAppEvent ReviewSubmissionItemType = "appEvents" ReviewSubmissionItemTypeAppStoreVersionExperiment ReviewSubmissionItemType = "appStoreVersionExperiments" ReviewSubmissionItemTypeAppStoreVersionExperimentTreatment ReviewSubmissionItemType = "appStoreVersionExperimentTreatments" ) // Response types type ReviewSubmissionsResponse = Response[ReviewSubmissionAttributes] type ReviewSubmissionResponse = SingleResponse[ReviewSubmissionAttributes] type ReviewSubmissionItemsResponse = Response[ReviewSubmissionItemAttributes] type ReviewSubmissionItemResponse = SingleResponse[ReviewSubmissionItemAttributes] ``` **2. `internal/asc/client_review_submissions.go`** (~150-200 lines) ```go // Review Submissions func (c *Client) GetReviewSubmissions(ctx context.Context, appID string, opts ...ReviewSubmissionsOption) (*ReviewSubmissionsResponse, error) func (c *Client) GetReviewSubmission(ctx context.Context, submissionID string) (*ReviewSubmissionResponse, error) func (c *Client) CreateReviewSubmission(ctx context.Context, platform Platform, appID string) (*ReviewSubmissionResponse, error) func (c *Client) UpdateReviewSubmission(ctx context.Context, submissionID string, attrs ReviewSubmissionUpdateAttributes) (*ReviewSubmissionResponse, error) // Note: Submitting is done via PATCH with state transition // PATCH body: { "data": { "attributes": { "submitted": true } } } func (c *Client) SubmitReviewSubmission(ctx context.Context, submissionID string) (*ReviewSubmissionResponse, error) // Review Submission Items func (c *Client) GetReviewSubmissionItems(ctx context.Context, submissionID string) (*ReviewSubmissionItemsResponse, error) func (c *Client) CreateReviewSubmissionItem(ctx context.Context, submissionID string, itemType ReviewSubmissionItemType, itemID string) (*ReviewSubmissionItemResponse, error) func (c *Client) UpdateReviewSubmissionItem(ctx context.Context, itemID string, attrs ReviewSubmissionItemUpdateAttributes) (*ReviewSubmissionItemResponse, error) func (c *Client) DeleteReviewSubmissionItem(ctx context.Context, itemID string) error ``` **3. `internal/asc/review_submissions_output.go`** (~100 lines) ```go func printReviewSubmissionsTable(resp *ReviewSubmissionsResponse) error func printReviewSubmissionsMarkdown(resp *ReviewSubmissionsResponse) error func printReviewSubmissionItemsTable(resp *ReviewSubmissionItemsResponse) error func printReviewSubmissionItemsMarkdown(resp *ReviewSubmissionItemsResponse) error ``` **4. `cmd/review_submissions.go`** (~300-350 lines) ```go func ReviewSubmissionsCommand() *ffcli.Command { return &ffcli.Command{ Name: "review-submissions", ShortUsage: "asc review-submissions <subcommand> [flags]", ShortHelp: "Manage App Store review submissions.", LongHelp: `Manage App Store review submissions. Review submissions can include multiple items: app versions, custom product pages, in-app events, and experiments. Examples: asc review-submissions list --app APP_ID asc review-submissions create --app APP_ID --platform IOS asc review-submissions submit --id SUBMISSION_ID --confirm`, UsageFunc: DefaultUsageFunc, Subcommands: []*ffcli.Command{ ReviewSubmissionsListCommand(), ReviewSubmissionsGetCommand(), ReviewSubmissionsCreateCommand(), ReviewSubmissionsSubmitCommand(), }, Exec: func(ctx context.Context, args []string) error { return flag.ErrHelp }, } } func ReviewSubmissionsListCommand() *ffcli.Command { fs := flag.NewFlagSet("review-submissions list", flag.ExitOnError) appID := fs.String("app", "", "App ID (required)") platform := fs.String("platform", "", "Filter by platform: IOS, MAC_OS, TV_OS, VISION_OS") state := fs.String("state", "", "Filter by state") limit := fs.Int("limit", 0, "Maximum results per page") paginate := fs.Bool("paginate", false, "Fetch all pages") output := fs.String("output", "json", "Output format") pretty := fs.Bool("pretty", false, "Pretty-print JSON") // ... } func ReviewSubmissionsCreateCommand() *ffcli.Command { fs := flag.NewFlagSet("review-submissions create", flag.ExitOnError) appID := fs.String("app", "", "App ID (required)") platform := fs.String("platform", "IOS", "Platform: IOS, MAC_OS, TV_OS, VISION_OS") output := fs.String("output", "json", "Output format") pretty := fs.Bool("pretty", false, "Pretty-print JSON") // ... } func ReviewSubmissionsSubmitCommand() *ffcli.Command { fs := flag.NewFlagSet("review-submissions submit", flag.ExitOnError) submissionID := fs.String("id", "", "Review submission ID (required)") confirm := fs.Bool("confirm", false, "Confirm submission (required)") output := fs.String("output", "json", "Output format") pretty := fs.Bool("pretty", false, "Pretty-print JSON") // Validation: require --confirm // ... } ``` **5. `cmd/review_items.go`** (~200-250 lines) ```go func ReviewItemsCommand() *ffcli.Command { return &ffcli.Command{ Name: "review-items", ShortUsage: "asc review-items <subcommand> [flags]", ShortHelp: "Manage review submission items.", LongHelp: `Manage items within a review submission. Items can be app versions, custom product pages, in-app events, or experiments. Examples: asc review-items list --submission SUBMISSION_ID asc review-items add --submission SUBMISSION_ID --item-type appStoreVersions --item-id VERSION_ID asc review-items remove --id ITEM_ID --confirm`, UsageFunc: DefaultUsageFunc, Subcommands: []*ffcli.Command{ ReviewItemsListCommand(), ReviewItemsAddCommand(), ReviewItemsRemoveCommand(), }, Exec: func(ctx context.Context, args []string) error { return flag.ErrHelp }, } } func ReviewItemsAddCommand() *ffcli.Command { fs := flag.NewFlagSet("review-items add", flag.ExitOnError) submissionID := fs.String("submission", "", "Review submission ID (required)") itemType := fs.String("item-type", "", "Item type: appStoreVersions, appCustomProductPages, appEvents (required)") itemID := fs.String("item-id", "", "Item ID (required)") output := fs.String("output", "json", "Output format") pretty := fs.Bool("pretty", false, "Pretty-print JSON") // ... } func ReviewItemsRemoveCommand() *ffcli.Command { fs := flag.NewFlagSet("review-items remove", flag.ExitOnError) itemID := fs.String("id", "", "Review submission item ID (required)") confirm := fs.Bool("confirm", false, "Confirm removal (required)") output := fs.String("output", "json", "Output format") pretty := fs.Bool("pretty", false, "Pretty-print JSON") // ... } ``` **6. Register in `cmd/commands.go`** Add `ReviewSubmissionsCommand()` and `ReviewItemsCommand()` to RootCommand().Subcommands ### API Endpoints Reference ``` Review Submissions: GET /v1/apps/{id}/reviewSubmissions → GetReviewSubmissions POST /v1/reviewSubmissions → CreateReviewSubmission GET /v1/reviewSubmissions/{id} → GetReviewSubmission PATCH /v1/reviewSubmissions/{id} → UpdateReviewSubmission / SubmitReviewSubmission Review Submission Items: GET /v1/reviewSubmissions/{id}/items → GetReviewSubmissionItems POST /v1/reviewSubmissionItems → CreateReviewSubmissionItem PATCH /v1/reviewSubmissionItems/{id} → UpdateReviewSubmissionItem DELETE /v1/reviewSubmissionItems/{id} → DeleteReviewSubmissionItem ``` ### CLI Usage Examples ```bash # List review submissions for an app asc review-submissions list --app "123456789" # Create a new review submission asc review-submissions create --app "123456789" --platform IOS # Add an app version to the submission asc review-items add --submission "SUBMISSION_ID" --item-type appStoreVersions --item-id "VERSION_ID" # Add a custom product page asc review-items add --submission "SUBMISSION_ID" --item-type appCustomProductPages --item-id "CPP_ID" # List items in a submission asc review-items list --submission "SUBMISSION_ID" # Submit for review asc review-submissions submit --id "SUBMISSION_ID" --confirm # Remove an item asc review-items remove --id "ITEM_ID" --confirm ``` ### Testing - Run `make test && make lint` - Test submission requires --confirm - Test item type validation
Author
Owner

@cursor[bot] commented on GitHub (Jan 24, 2026):

Summary:

  • Added review submissions + review items client types/methods, resource types, pagination support, and table/markdown output.
  • Implemented review-submissions and review-items CLI commands with validation and confirm guards.
  • Added client + CLI validation tests for review submissions/items flows.

Tests:

  • make test && make lint

View PR
Open in Cursor Open in Web

<!-- gh-comment-id:3795331373 --> @cursor[bot] commented on GitHub (Jan 24, 2026): Summary: - Added review submissions + review items client types/methods, resource types, pagination support, and table/markdown output. - Implemented `review-submissions` and `review-items` CLI commands with validation and confirm guards. - Added client + CLI validation tests for review submissions/items flows. Tests: - `make test && make lint` <a href="https://github.com/rudrankriyam/App-Store-Connect-CLI/pull/104"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/view-pr-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/view-pr-light.svg"><img alt="View PR" src="https://cursor.com/view-pr-light.svg"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-c0c3369c-e67f-4831-9702-1b16d9dd3e2e"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/open-in-cursor-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/open-in-cursor-light.svg"><img alt="Open in Cursor" src="https://cursor.com/open-in-cursor.svg"></picture></a>&nbsp;<a href="https://cursor.com/agents?id=bc-c0c3369c-e67f-4831-9702-1b16d9dd3e2e"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/open-in-web-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/open-in-web-light.svg"><img alt="Open in Web" src="https://cursor.com/open-in-web.svg"></picture></a>
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/App-Store-Connect-CLI#30
No description provided.