Skip to content

SCP Routes#343

Merged
priyanka-TL merged 1 commit intomasterfrom
SCP
Aug 28, 2025
Merged

SCP Routes#343
priyanka-TL merged 1 commit intomasterfrom
SCP

Conversation

@priyanka-TL
Copy link
Copy Markdown
Collaborator

@priyanka-TL priyanka-TL commented Aug 28, 2025

Summary by CodeRabbit

  • New Features
    • Introduced Self-Creation Portal APIs under /scp/v1 covering projects, rollouts, programs, resources, permissions, configurations, and related operations.
    • Added health check endpoint at /scp/health.
  • Refactor
    • Migrated numerous public routes from legacy project scope to the Self-Creation Portal scope for consistency and clearer ownership.
    • Removed the deprecated /project/v1/userProjects/addEntity endpoint; use the new /scp/v1 alternatives.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Aug 28, 2025

Walkthrough

The single routes file replaces one legacy project-scoped route with a large set of new self-creation-portal (SCP) routes under /scp/v1 and /scp/health, updates mappings to the self-creation-portal service/package, adds some targetBody/responseBody placeholders, and normalizes minor whitespace in requiresCustomHandling.

Changes

Cohort / File(s) Change summary
Formatting normalization
interface-routes/elevate-dev-routes.json
Normalized spacing around requiresCustomHandling: true (no semantic change).
Legacy project route removal
interface-routes/elevate-dev-routes.json
Removed /project/v1/userProjects/addEntity (POST) mapping to project/elevate-project.
SCP routes addition and re-scope
interface-routes/elevate-dev-routes.json
Added numerous /scp/v1 routes for projects, rollouts, resources, permissions, configurations, organization-extensions, programs, certificates; all mapped to basePackageName self-creation-portal, packageName elevate-self-creation-portal, service self-creation-portal.
Mapping metadata additions
interface-routes/elevate-dev-routes.json
For select SCP routes (e.g., getDataManagers), included targetBody and responseBody arrays in targetPackages.
Health endpoint addition
interface-routes/elevate-dev-routes.json
Added /scp/health (GET) mapped to self-creation-portal.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant C as Client
  participant G as API Router
  participant P as Project Service
  note over C,G: Previous flow (removed)
  C->>G: POST /project/v1/userProjects/addEntity
  G->>P: Forward request
  P-->>G: Response
  G-->>C: Response
Loading
sequenceDiagram
  autonumber
  participant C as Client
  participant G as API Router
  participant S as Self-Creation-Portal Service
  rect rgba(196,235,255,0.3)
    note over C,G: New SCP routes
    C->>G: GET/POST /scp/v1/... (e.g., projects/update)
    G->>S: Route to self-creation-portal
    S-->>G: Response (may use targetBody/responseBody shaping)
    G-->>C: Response
  end
  note over C,G: Health check
  C->>G: GET /scp/health
  G->>S: Health probe
  S-->>G: OK
  G-->>C: OK
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

Suggested reviewers

  • VISHNUDAS-tunerlabs

Poem

Hop hop hooray, new paths to explore,
From project to SCP, we’ve opened a door.
Routers now whisk to a fresher locale,
Health checks squeak “OK” in cheerful morale.
With tidy spacing and mappings anew,
This bunny stamps routes—clean, crisp, true. 🐇✨

Tip

🔌 Remote MCP (Model Context Protocol) integration is now available!

Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats.

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch SCP

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbit in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbit in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbit gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbit read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbit help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbit ignore or @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbit summary or @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbit or @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

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: 7

🧹 Nitpick comments (2)
interface-routes/elevate-dev-routes.json (2)

13421-13434: Empty mapping arrays add noise.

targetBody: [] and responseBody: [] are no-ops. Remove them or populate with actual mapping when available.

-          "packageName": "elevate-self-creation-portal",
-          "targetBody": [],
-          "responseBody": []
+          "packageName": "elevate-self-creation-portal"

Also applies to: 13579-13592


13159-13183: Rename POST endpoint and add rate limit
Keep GET /scp/v1/resource/getPublishedResources for idempotent listing; introduce POST /scp/v1/resource/searchPublishedResources (or similar) for filter-based searches and configure rate limiting on that route.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 4d74927 and 4aa1300.

📒 Files selected for processing (1)
  • interface-routes/elevate-dev-routes.json (3 hunks)
🔇 Additional comments (4)
interface-routes/elevate-dev-routes.json (4)

12426-12426: Whitespace-only normalization acknowledged.

No functional change; keep as-is.

Also applies to: 12444-12444


12611-12637: Confirm server handlers for newly reintroduced project addEntity routes.

Ensure elevate-project exposes POST handlers for both /project/v1/userProjects/addEntity and /project/v1/userProjects/addEntity/:id. If these were legacy aliases, consider deprecating one to avoid API sprawl.


13367-13378: Rate limiting for file operations.

Signed-URL and cloud fetch endpoints are sensitive. Add appropriate rateLimit (e.g., public-low or internal) to mitigate abuse.

Apply an example on both:

       "orchestrated": false,
+      "rateLimit": { "type": "public-low" },

Also applies to: 12925-12936


13659-13671: New health endpoint looks good.

Scoped to self-creation-portal with explicit service.

Comment on lines +12639 to +12653
"sourceRoute": "/scp/v1/permissions/list",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/config/list",
"type": "GET",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue

Duplicate route: /scp/v1/permissions/list (GET) declared twice.

Keep a single declaration to avoid nondeterministic routing/maintenance issues. Suggest removing the later duplicate at Lines 13041-13053.

Apply this diff to remove the duplicate block:

-    {
-      "sourceRoute": "/scp/v1/permissions/list",
-      "type": "GET",
-      "priority": "MUST_HAVE",
-      "inSequence": false,
-      "orchestrated": false,
-      "targetPackages": [
-        {
-          "basePackageName": "self-creation-portal",
-          "packageName": "elevate-self-creation-portal"
-        }
-      ]
-    },

Also applies to: 13041-13053

🤖 Prompt for AI Agents
In interface-routes/elevate-dev-routes.json around lines 12639 to 12653 there's
a GET route for "/scp/v1/permissions/list" that is duplicated later; remove the
duplicate declaration at lines 13041-13053 so only the original route remains to
prevent nondeterministic routing and maintenance issues.

Comment on lines +12639 to +13671
"sourceRoute": "/scp/v1/permissions/list",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/config/list",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/form/create",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/form/update",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/form/update/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/form/read",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/form/read/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/entity-types/create",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/entity-types/read",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/entity-types/update",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/entity-types/update/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/entity-types/delete",
"type": "DELETE",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/entity-types/delete/:id",
"type": "DELETE",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/entities/create",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/entities/read",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/entities/read/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/entities/update",
"type": "PUT",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/entities/update/:id",
"type": "PUT",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/entities/delete",
"type": "DELETE",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/entities/delete/:id",
"type": "DELETE",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/projects/details/",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/projects/details/:id",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/project/v1/userProjects/addEntity/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "project",
"packageName": "elevate-project"
}
],
"service": "project"
}
"sourceRoute": "/scp/v1/cloud-services/file/fetchJsonFromCloud",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/projects/reviewerList",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/projects/update",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/projects/update/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/projects/update/:id",
"type": "DELETE",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/permissions/create",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/permissions/update/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/permissions/getPermissions",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/permissions/delete/:id",
"type": "DELETE",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/permissions/list",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/modules/create",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/modules/update/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/modules/list",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/modules/delete/:id",
"type": "DELETE",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/certificates/list",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/certificates/update",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/certificates/update/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/resource/list",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/resource/getPublishedResources",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/resource/getPublishedResources",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/resource/upForReview",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/role-permission-mapping/create/:role_id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/role-permission-mapping/delete/:role_id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/role-permission-mapping/list",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/projects/submitForReview/:resource_id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/projects/submitForReview/",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/comments/list",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/comments/update",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/comments/update/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/comments/update/:id",
"type": "DELETE",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/reviews/update/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/reviews/start/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/reviews/approve/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/reviews/rejectOrReport/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/cloud-services/file/getSignedUrl",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/resource/browseExisting",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": true,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal",
"targetBody": [],
"responseBody": []
}
]
},
{
"sourceRoute": "/scp/v1/rollouts/update",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/rollouts/update/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/rollouts/getDataManagers",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal",
"targetBody": [],
"responseBody": []
}
]
},
{
"sourceRoute": "/scp/v1/rollouts/list",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/rollouts/details/:id",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/rollouts/update/:id",
"type": "DELETE",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/rollouts/publish/:id",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/resource/publishCallback",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/programs/update",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/programs/update/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/programs/update/:id",
"type": "DELETE",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/programs/details/:id",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/programs/addResources/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/programs/removeResources/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/programs/getProgramManagers",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal",
"targetBody": [],
"responseBody": []
}
]
},
{
"sourceRoute": "/scp/v1/programs/submitForReview/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/programs/reviewerList",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/programs/publish/:id",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/organization-extensions/updateConfig/:id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/v1/organization-extensions/createConfig",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
{
"sourceRoute": "/scp/health",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
],
"service": "self-creation-portal"
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Automate validation for duplicates, unsafe GETs, and naming inconsistencies.

Run this repository-local script to surface issues (duplicates, trailing slashes, GET mutations, DELETE under “update”):


🏁 Script executed:

#!/bin/bash
set -euo pipefail

FILE="interface-routes/elevate-dev-routes.json"

echo "Duplicate (type,sourceRoute) entries:"
jq -r '.routes[] | "\(.type)|\(.sourceRoute)"' "$FILE" | sort | uniq -d || true
echo

echo "Routes with trailing slash in sourceRoute:"
jq -r '.routes[] | select(.sourceRoute|endswith("/")) | .sourceRoute' "$FILE" | sort -u || true
echo

echo "GET routes that look mutating (publish/approve/reject/start/submitForReview):"
jq -r '.routes[] | select(.type=="GET" and (.sourceRoute|test("(publish|approve|reject|start|submitForReview)"))) | .sourceRoute' "$FILE" | sort -u || true
echo

echo "DELETE routes under /update/:"
jq -r '.routes[] | select(.type=="DELETE" and (.sourceRoute|test("/update/"))) | .sourceRoute' "$FILE" | sort -u || true

Length of output: 6793


Automate detection of duplicate routes, trailing‐slash inconsistencies, mutating GET endpoints, and DELETE under “update” paths.
Run this repository-local script to surface existing issues before merging:

#!/bin/bash
set -euo pipefail

FILE="interface-routes/elevate-dev-routes.json"

echo "Duplicate (type,sourceRoute) entries:"
jq -r '.routes[] | "\(.type)|\(.sourceRoute)"' "$FILE" | sort | uniq -d || true
echo

echo "Routes with trailing slash in sourceRoute:"
jq -r '.routes[] | select(.sourceRoute|endswith("/")) | .sourceRoute' "$FILE" | sort -u || true
echo

echo "GET routes that look mutating (publish|approve|reject|start|submitForReview):"
jq -r '.routes[] | select(.type=="GET" and (.sourceRoute|test("(publish|approve|reject|start|submitForReview)"))) | .sourceRoute' "$FILE" | sort -u || true
echo

echo "DELETE routes under /update/:"
jq -r '.routes[] | select(.type=="DELETE" and (.sourceRoute|test("/update/"))) | .sourceRoute' "$FILE" | sort -u || true
🤖 Prompt for AI Agents
In interface-routes/elevate-dev-routes.json around lines 12639 to 13671 there
are duplicate (type, sourceRoute) entries, routes with trailing slashes, GET
endpoints that perform mutating actions, and DELETE entries placed under
"/update" paths; run the provided repository-local script to list offending
entries, then: remove or consolidate duplicate route objects so each (type,
sourceRoute) is unique, normalize sourceRoute values by removing trailing
slashes (unless the route intentionally requires one), change mutating GET
routes (publish, approve, reject, start, submitForReview) to the appropriate
non-GET verb (POST/PUT) or move their side-effects into POST/PUT handlers, and
relocate or rename DELETE routes so they are not declared under "/update" (or
change their type to match intent); re-run the script to verify no duplicates,
no trailing-slash inconsistencies, no mutating GETs, and no DELETEs under update
paths before committing.

Comment on lines +12899 to +12910
"sourceRoute": "/scp/v1/projects/details/",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Trailing slash in route path is error-prone.

Use a stable path without trailing slash: /scp/v1/projects/details (for collection read).

Apply:

-      "sourceRoute": "/scp/v1/projects/details/",
+      "sourceRoute": "/scp/v1/projects/details",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"sourceRoute": "/scp/v1/projects/details/",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
"sourceRoute": "/scp/v1/projects/details",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
🤖 Prompt for AI Agents
In interface-routes/elevate-dev-routes.json around lines 12899 to 12910 the
sourceRoute ends with a trailing slash ("/scp/v1/projects/details/"), which is
error-prone; change it to the stable path without the trailing slash
("/scp/v1/projects/details") to represent the collection read route consistently
across the routing table, update any duplicate entries or references if present
to use the new path, and run a quick lint/validation of the JSON to ensure no
other routes rely on the trailing slash.

Comment on lines +12976 to +12988
{
"sourceRoute": "/scp/v1/projects/update/:id",
"type": "DELETE",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

DELETE actions under “update” paths are misleading.

Rename DELETE endpoints from .../update/:id to .../delete/:id (or RESTful .../:id). Keeps semantics clear and avoids client confusion.

Apply these edits:

-      "sourceRoute": "/scp/v1/projects/update/:id",
+      "sourceRoute": "/scp/v1/projects/delete/:id",
-      "sourceRoute": "/scp/v1/rollouts/update/:id",
+      "sourceRoute": "/scp/v1/rollouts/delete/:id",
-      "sourceRoute": "/scp/v1/comments/update/:id",
+      "sourceRoute": "/scp/v1/comments/delete/:id",
-      "sourceRoute": "/scp/v1/programs/update/:id",
+      "sourceRoute": "/scp/v1/programs/delete/:id",

Also applies to: 13462-13473, 13302-13313, 13526-13538

🤖 Prompt for AI Agents
In interface-routes/elevate-dev-routes.json around lines 12976-12988, the
sourceRoute value "/scp/v1/projects/update/:id" should be renamed to a clearer
verb or RESTful path (either "/scp/v1/projects/delete/:id" or
"/scp/v1/projects/:id"); update the "sourceRoute" string accordingly and ensure
any dependent metadata remains consistent. Apply the same change to the other
occurrences at lines 13302-13313, 13462-13473, and 13526-13538 in this file so
all DELETE endpoints under "update" paths are renamed consistently.

Comment on lines +13237 to +13248
"sourceRoute": "/scp/v1/projects/submitForReview/:resource_id",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue

Conflicting submitForReview routes.

Both /scp/v1/projects/submitForReview/:resource_id and /scp/v1/projects/submitForReview/ exist. Remove the trailing-slash variant or rename it (e.g., /scp/v1/projects/submitForReview) if you need a body-only variant.

Apply this diff to remove the trailing-slash version:

-    {
-      "sourceRoute": "/scp/v1/projects/submitForReview/",
-      "type": "POST",
-      "priority": "MUST_HAVE",
-      "inSequence": false,
-      "orchestrated": false,
-      "targetPackages": [
-        {
-          "basePackageName": "self-creation-portal",
-          "packageName": "elevate-self-creation-portal"
-        }
-      ]
-    },

Also applies to: 13250-13261

🤖 Prompt for AI Agents
In interface-routes/elevate-dev-routes.json around lines 13237-13248 and
13250-13261, there are two conflicting routes for submitForReview: one with a
trailing slash (/scp/v1/projects/submitForReview/) and one with a resource_id
parameter (/scp/v1/projects/submitForReview/:resource_id); remove the
trailing-slash variant (or rename it to /scp/v1/projects/submitForReview if you
need a body-only endpoint) by deleting the entire JSON object entries for the
trailing-slash route at those ranges so only the parameterized route remains.

Comment on lines +13475 to +13486
"sourceRoute": "/scp/v1/rollouts/publish/:id",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue

Mutating operations exposed as GET (publish).

GET must be safe/idempotent. Switch publish endpoints to POST.

Apply:

-      "type": "GET",
+      "type": "POST",

Also applies to: 13620-13631

🤖 Prompt for AI Agents
In interface-routes/elevate-dev-routes.json around lines 13475-13486 (and
similarly at 13620-13631) the publish endpoints are defined with "type": "GET"
but perform mutating operations; change the HTTP method to "POST" for those
entries to ensure non-safe operations are not exposed as GET, updating the
"type" field value from "GET" to "POST" and verifying any related documentation
or clients that reference these route definitions are updated accordingly.

Comment on lines +13488 to +13499
"sourceRoute": "/scp/v1/resource/publishCallback",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Callback should not be GET.

Use POST for /scp/v1/resource/publishCallback to reflect a webhook/callback semantics and to allow body payloads.

-      "type": "GET",
+      "type": "POST",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"sourceRoute": "/scp/v1/resource/publishCallback",
"type": "GET",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
},
"sourceRoute": "/scp/v1/resource/publishCallback",
"type": "POST",
"priority": "MUST_HAVE",
"inSequence": false,
"orchestrated": false,
"targetPackages": [
{
"basePackageName": "self-creation-portal",
"packageName": "elevate-self-creation-portal"
}
]
🤖 Prompt for AI Agents
In interface-routes/elevate-dev-routes.json around lines 13488 to 13499, the
route definition for "/scp/v1/resource/publishCallback" is incorrectly using
"type": "GET"; change it to "type": "POST" to reflect webhook/callback semantics
and allow request bodies, and verify any consumers or tests expecting GET are
updated accordingly (ensure routing, authentication, and payload handling expect
POST).

@priyanka-TL priyanka-TL merged commit f458e5e into master Aug 28, 2025
1 check passed
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