Menu

Delivery targets and hosting

On this page

The SCORM 1.2 and web targets of one build, and the core as the client of Elabora’s hosting. Part of the architecture, the contract every change follows.

Delivery targets (D41)

One build, two targets (BuildOptions.target, elabora build --target, MCP elabora_build target, the engine’s build request target):

scorm12 (default) web
Output dist/<course>-<version>-scorm12.zip (--dir: the folder too) dist/<course>-<version>-web/ and its ZIP
Files imsmanifest.xml, index.html, elabora/, assets/, objects/ the same without imsmanifest.xml; share.<ext> with --image
Checks LMS profiles (delivery.lms, --profile): suspend data budget, package limits, forbidden extensions no LMS (validateProject target: 'web'); portable file names
index.html title title, description, Open Graph and Twitter card, robots (noindex), canonical (url), sharing image
Player SCORM 1.2 adapter when an LMS is found, else the preview’s standalone adapter (sessionStorage, banner) web adapter (web.ts): progress local (localStorage, elabora:web:<course id>) or none; no banner, no Quit, no LMS search
Navigation the course’s rules navigation authored (the course’s rules) or free, applied by the compiler in the course data (mode: free, no lockUntilComplete, outline shown, narration seek seen → free)

The settings live in the build, not in course.json: the same course is published as a showcase, a review and a publication. The compiled course says them in delivery ({ target: 'web', progress, navigation }), the build report in web (with noindex, url, image), and the proof dossier in « Diffusion web ». docs/delivery-web.md gives the recipes.

Review builds (D42). --review-origin <origin> (repeatable; web.review { origins }) makes a module for the Revue: the build adds elabora/review.js (@elabora/player review.ts, after player.js in index.html) and delivery.review { origins, languages } to the course data; the player’s files are unchanged, and a build without it is unchanged byte for byte. The bridge speaks elabora-review/1 (review-protocol.ts: types and pure functions a review page may import) with the page that frames the module, only with the origins named: where the reviewer is (ready, location), where every block is (blocks, the canvas’s layout-report.ts), the text size and column (layout, measure), and it goes to an anchor, pauses the narration and moves its column aside for a floating panel. It drives the player through the hooks of the same build. docs/review-bridge.md is the protocol.

Hosting (D43)

@elabora/node cloud/ is the client of Elabora’s hosting (its protocol, version 3; the API at https://api.elabora.studio, ELABORA_CLOUD_URL for tests). elabora account, elabora publish and elabora review call it, and the MCP server’s two read tools; the app will.

Module Role
client.ts CloudClient (one request, a bearer credential, JSON or raw bytes), CloudError (the API’s status, stable code, message, details, Retry-After; E_CLOUD_* codes for this side), cloudUrl (HTTPS, or HTTP on this computer), secrets masked in messages
credentials.ts The session token (<local data>/credentials/elabora-session) and a tester’s invitation key (credentials/elabora-invitation), 0600 files naming their API; ELABORA_CLOUD_KEY_FILE; a credential is only sent to its API
account.ts Sign-in by code (startSignIn, verifySignIn writes the session), the handle once, status with limits and usage, sign-out; connect (the client and the space), guard (a 401 ends a session)
publish.ts publishCourse (a web build in a temporary folder: a review build for a private publication, the address as canonical and noindex for a public one), publishFolder (hash, announce, send the missing blobs whole or in parts, commit), publishBuiltFolder; a new private version goes to the publication’s open reviews
reviews.ts The author’s review routes: create, list, link, state, versions, delete; comments with since, reply, resolve, reopen; courseReviews (by the publications’ meta.course.id)
records.ts What this computer published of a course, in <project data>/cloud/publications.json: each version, its course version and a hash of every screen then
resolve.ts resolveComments: each comment placed in the sources (screen by permanent key → id, title, file; block → type, pointer, layer; step, layer, line and word; translation; point and frame), with newerInReview and screenChanged
types.ts The protocol’s shapes and the resolved comments, without imports (the app window may name them)

Publishing, sharing, answering and resolving are people’s gestures: the MCP server only reads (elabora_review_list, elabora_review_comments).