feat(exim): add iblai-api-exim skill for data export/import - #22
Open
mamigot wants to merge 1 commit into
Open
Conversation
Adds the export/import surface under /api/exim/manage/, which had no skill coverage. Two lanes: - platform-migrations — whole-org export/import. Start a run, poll status + phase, download the bundle .zip, and upload that zip to another deployment to import it. This is the "take my data with me" path. - course export/import — eligibility records, Studio target environments, and the EximTask queue (read-only + cancel). Endpoints, request fields, permissions, and status codes are derived from the iblai-dm-pro URLconf, views, and serializers (ibl-dm-import-export-manager), per the "source of truth = the repo URLconf" rule in CLAUDE.md — not from the published OpenAPI schema, which carries no request/response bodies for these routes. references/platform-migration.md holds the run lifecycle, the component registry (mandatory vs optional data sets), and the deployment-to-deployment bundle handoff. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds
/iblai-api-exim— a new skill covering/api/exim/manage/, which had zero coverage in this repo. Nothing here overlaps an existing skill.Two independent lanes live under that prefix, and the skill keeps them clearly separated:
status+phase, download the resulting bundle.zip, and upload that same zip to another deployment to import it. This is the "take my data with me" path, and it's the reason this gap was worth closing: it's the API behind data ownership, and an agent couldn't drive it at all.EximTaskqueue (read-only, pluscancel).Why this was missing
It never surfaced because it isn't in the developer docs either — it's an API-only surface. It came out of a coverage sweep comparing this repo against the platform's full route inventory.
Sourcing
Per
CLAUDE.md("source of truth = the repo URLconf, not the docs"), every endpoint, request field, permission, and status code was read offiblai-dm-pro—ibl-dm-import-export-manager/{urls.py,views.py,serializers.py}andplatform_migration/components.py— not from the published OpenAPI schema, which carries no request/response bodies for these routes.That sourcing produced details the schema alone could not have:
IsDMAdminon every endpoint503feature gate on both start paths409cancel race (conditional UPDATE — only apendingrun/task can be canceled; an executing run is never interrupted)download's400/409/404conditions and its302to a presigned S3 URL on multi-node deploymentstokenbeing write-only on target environmentsoauth_credentialsortoken" validation ruleimport-upload/, and thatsource_keyis read from the bundle, not the requestStructure
Follows the canonical section order from
CLAUDE.md:Auth & conventions→Concepts→Reads→Writes→Example→Notes→Reference material, with resource groupings as###inside Reads/Writes. Every destructive or outward-facing call is marked "confirm with the user first."references/platform-migration.mdholds what would bloat the primary: the run lifecycle, the component registry table (which data sets are mandatory vs optional and what each carries), status/phase semantics, and the deployment-to-deployment bundle handoff including where the bundle physically lives on single-node vs S3 deployments.Also
Worth a reviewer's eye
Componentregistry table is transcribed fromcomponents.py. If that registry has changed since, the table needs the same edit.direction: "import"with abundle_pathas the alternative toimport-upload/. That path is inferred from the serializer's validation rules rather than from an explicit code path — worth confirming it's a supported flow and not just a permissive validator.🤖 Generated with Claude Code