Production hub

Docs, evidence snapshot, and release history.

A public operations hub for the compiler pipeline, current evidence, API contracts, and shipped release history.

Support boundaries, refusals and known limits

Before submitting code or applying a result, check the source language, target language and the constructs you need. A language in the selector does not mean every program in that language can be converted.

What is supported

Support is directional. Reading Python and producing JavaScript are separate capabilities; the reverse direction must be checked separately. In the editor, open the support manual beside the plan badge and inspect the selected pair and its language details. API and MCP users can list languages and check a pair before submitting code.

An atomic construct is one small feature, such as a literal, operator, call or declaration. Composition means combining features in a particular position, such as a call inside a declaration. An ordinary program also brings imports, libraries, files and runtime behavior. Success on a construct or a selected combination does not establish support for an arbitrary program.

Input counts cover checked source-language feature cases. Output implementation counts cover available output forms; execution-backed output counts cover separately tested cases. Each fraction uses its own stated unit and denominator. These are snapshots of measured cases, not the percentage of all programs that will work, and input and output percentages must not be blended.

The “Internal roundtrip verified” output count comes from re-reading generated target text and running it in an internal interpreter. It is not execution in every target language’s runtime. Separately displayed native-runtime checks cover only their named examples and environments and do not add to that fraction.

How to read a result

  • Complete means the converter assembled the recognized parts without reported gaps. Even ok: true with status: converted does not mean this request was executed or its behavior proved correct. Current fragments report implemented separately from semanticVerified, which remains false for each request; verified is a deprecated alias of that field.
  • A partial status means conversion is incomplete; it can contain some fragments or none. Read fragments and gaps even when text is null. When text is present, unconverted source may remain inside target-language comments. That text is not a finished program and must not be applied as-is.
  • No output means no converted fragment is available. Inspect status and gaps. An input failure can mean invalid syntax, an incorrect language hint or an unsupported form; it does not prove the original program is invalid in its own language.
  • HTTP 200 means a response arrived, not that conversion succeeded. Check the JSON ok and status fields. For MCP batches, also inspect every item’s result.ok, status and gaps; the batch or item wrapper can succeed while conversion fails. Explain streams can return HTTP 200 and later an error event; read the stream through its terminal event.
Why a request can stop — and what to do
Invalid or unreadable input
E_BAD_REQUEST, E_BINARY or input-law-fail: send nonempty source text, remove NUL bytes, check JSON and specify the source language. Reduce the input to a standalone example.
Unavailable language or construct
unsupported-target or no-implemented-route: inspect the selected direction and feature list. Choose an implemented target or rewrite the unsupported part yourself. Changing the language label does not add support.
Meaning cannot be preserved
adapter-fail can cover target emission failure or a semantic guard, for example incompatible integer division. Ambiguous forms, such as Rust ! with an unknown operand type, can be refused at input. Supply the relevant type/context or simplify the expression; do not hide the rejected part.
Only a value or fragment is available
binding-edge-declaration-not-rendered, render-context-not-wired or unverified-marker-content: inspect the gaps and the required target context. Convert a smaller expression if useful, then implement and test the missing declaration or surrounding code yourself.
Input too large or length missing
E_TOO_LARGE / HTTP 413 or E_LENGTH_REQUIRED / HTTP 411: send Content-Length where required and reduce the request. Limits count UTF-8 bytes; a whole request and its source field can have different limits. Split only at meaningful boundaries and retain needed context.
Time limit reached
E_TIMEOUT / HTTP 504, or an MCP timeout error: try a smaller example. A timeout is not a completed conversion. Avoid repeatedly submitting the same large input.
Rate or daily limit reached
HTTP 429, E_RATE_LIMITED, E_RATE_LIMIT, E_QUOTA_EXCEEDED or E_DAILY_LIMIT: follow Retry-After or the stated reset time. HTTP API and MCP share a daily conversion bucket; batch items count individually. Web and AI routes have separate limits. Failed requests can also consume quota.
Access cannot be established
HTTP 401/403, E_UNAUTHORIZED, E_FORBIDDEN or E_CSRF: sign in again, check the API key and use the intended entry point. Restricted tools can require additional access. Do not send a key or session cookie to support.
A service or required store is unavailable
HTTP 500/502/503, E_UNAVAILABLE, E_QUOTA_STORAGE_UNAVAILABLE, E_ENTITLEMENT_UNAVAILABLE, E_INTERNAL or a provider error: keep the original code, retry later and report a persistent failure. A quota or entitlement lookup failure is not evidence that access was granted.
Known limits before applying code
Execution scope
Measured examples cover finite inputs and observations. They do not establish behavior for arbitrary data, every branch, every runtime version or every language pair. Conversion does not run your request to establish equivalence.
Target semantics
Integer division, boolean versus numeric results, overflow, evaluation order and equality can differ by language. Guards reject some unsupported combinations; absence of a refusal does not prove every semantic difference was detected.
Placement and missing context
A result can be an expression fragment rather than a file. Where supplied, read fragmentKind and disclosures. Imports, external definitions, framework APIs, build settings and multi-file dependencies still need integration and testing in the target environment.
Combinations beyond the measured cases
Nested features, macros, reflection, runtime code generation and platform-specific APIs are not covered by a blanket program guarantee. Individually supported features can still fail when combined.
Diagnostics and partial output
Partial comments preserve source for review, not target behavior. Some failures use a general input or adapter error without identifying the exact semantic cause. Missing diagnostics do not establish correctness.
Tool and AI scope
MCP returns text and data; it does not execute code or apply repository changes. Optional AI explanation or refinement is a separate operation and is not proof that a conversion is correct. Review the diff and run your own target-language tests before applying any result.

Support and billing

Paid checkout is in preparation. This guide does not announce paid availability, prices, grace periods, refund eligibility, gifts or account transfers.

For a conversion problem, include the source and target languages, a small non-sensitive example, the error/status, expected behavior and request ID if present. Remove credentials and private data before sending. Contact support@lenacode.com.

Docs

Developer API guide

Issue a key in the editor, call the HTTP API, or connect your agent over MCP — one key, one shared quota, the same honest implementation-versus-semantic-evidence contract everywhere.

One key, two surfaces: the HTTP API and the MCP server expose the same registered direct-adapter conversion, with the same shared daily quota. Each fragment reports implementation separately from admissible semantic verification; exact-text regression establishes implementation only, and missing implementation is an honest gap.

Step 1

Get an API key

Keys are issued in the editor and shown exactly once — store yours in a secret manager. Rotating or revoking a key takes effect immediately on both the HTTP API and the MCP server.

  1. Sign in with GitHub or Google in the editor.
  2. Open the API & Usage panel and issue a key (format: lena_sk_…).
  3. Copy it immediately — only a short display prefix is ever shown again.
Open the editor

Step 2

REST quickstart

POST your source to /api/v1/convert with the key in the x-lena-api-key header. The response separates registered implementation from semantic verification: read each fragment, status, and gaps before using text.

The full request/response contract — every status value, error shape, and field — is pinned in the OpenAPI document below. The response carries schemaVersion so future envelope changes are explicit, never silent.

/api/openapi.json
Request
curl -X POST https://www.lenacode.com/api/v1/convert \
  -H "x-lena-api-key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sourceLanguage": "python",
    "targetLanguage": "javascript",
    "code": "def add(a, b):\n    return a + b"
  }'
Response shape
{
  "schemaVersion": "1.1",
  "ok": true,                   // true only for complete conversion
  "status": "converted",        // or: partial | no-implemented-route | ...
  "sourceLanguage": "python",
  "targetLanguage": "javascript",
  "text": "...",                // complete or honest partial assembly
  "fragments": [ { "facetKey": "...", "text": "...", "implemented": true,
                   "semanticVerified": false, "verified": false } ], // verified is a deprecated semantic alias
  "gaps": [ { "facetKey": "...", "reason": "...", "message": "..." } ],
  "verification": { "inputLaw": "pass", "outputAdapters": "registered-direct-only", ... },
  "requestId": "..."
}

Read fragments and gaps for assembly completeness: fragments without gaps are complete, fragments with gaps are partial, and no fragments is none. These states do not establish semantic support. Each fragment exposes implemented and semanticVerified separately; the deprecated verified alias mirrors semanticVerified. Current transform receipts have no per-invocation semantic oracle, so both semantic fields fail closed to false. A partial result may have text null when no ordered assembly is available. Partial text keeps ok false, preserves each gap form in place as a target-language comment around its original source, and may not compile or run.

Step 3

Connect over MCP

The MCP server (streamable HTTP) gives agents the same conversion plus discovery tools. It is read/transform only: no tool edits files, applies patches, or executes code — applying results is always the caller’s decision.

Recommended call order: lena_list_languages → lena_check_route → lena_transform. Discovery tools are free; only submitting source code consumes the shared daily quota.

Claude Code
claude mcp add --transport http lena-code https://www.lenacode.com/api/mcp \
  --header "Authorization: Bearer YOUR_KEY"
Cursor / generic MCP client (mcp.json)
{
  "mcpServers": {
    "lena-code": {
      "url": "https://www.lenacode.com/api/mcp",
      "headers": { "Authorization": "Bearer YOUR_KEY" }
    }
  }
}
ToolQuotaWhat it does
lena_list_languagesFreeCanonical language ids, accepted aliases, input verified counts, output implemented counts, and output semantic-verified counts. Call this first — never guess ids.
lena_check_routeFreePre-flight for a source/target pair: implemented and semantic-verified atomic intersections without spending quota or source tokens.
lena_transformCountsThe conversion itself. Read domain ok, status, each fragment's implemented and semanticVerified fields, gaps, and guidance. Current receipts have no per-invocation semantic oracle, so semanticVerified and verified fail closed to false. Partial text may preserve gap forms as comments and may not compile or run. An unassembled partial can keep text null.
lena_transform_batchCountsMultiple conversions in one call. Each item consumes quota individually, and any partial item may not compile or run.
lena_get_coverageFreeAggregate input verified coverage, legacy-inclusive output allocation, and separated output evidence indicators.
lena_get_language_coverageFreeInput verified, output implemented, and output semantic-verified numbers for one language.

Metering

Quotas & plans

API and MCP conversions draw from one shared daily pool per key. Editor conversions are metered separately. Quotas reset at UTC midnight.

Plans & pricing
PlanAPI + MCP / day (shared)Price
free25$0/mo
pro1,000$5/mo
max5,000$15/mo

Per-request input limit: 256 KB UTF-8; binary content is rejected. Rate limiting applies on top of daily quotas — exceeded requests return 429 with a retry-after header.

Contract

Errors & limits

Errors are JSON with a stable code and a requestId you can quote to support. The same key and quota semantics apply on MCP — tool errors carry the equivalent reason.

401
Missing, malformed, revoked, or rotated key.
429
Rate limit or daily quota exceeded — the body says which, and retry-after says when.
400 / 413
Invalid body, binary content, or input over the 256 KB limit.
503
Entitlement state temporarily unavailable — the API refuses rather than guessing your plan. Retry shortly.

Submitted source is processed in memory for the request only; generated results may use a short-window hash-keyed cache. Privacy details

For agents

Machine-readable resources

Agents can learn this surface without scraping HTML: the OpenAPI contract over HTTP, and MCP resources served by the server itself.

  • /api/openapi.jsonfull HTTP contract (also served as the MCP resource lena://openapi)
  • lena://usage-guideagent-directed guide served by the MCP server
  • lena://health-publicpublic health snapshot
  • /api/coverage/exposureseparated input verification, output implementation, and output semantic evidence; append /{languageId} for one language
  • /llms.txtthis guide’s entry points, in plain text

RELEASE LOG

Changelog

Slice-level release history derived from git log and curated public titles.

Changelog generated at 2026-09-21

Featured updates

30/50

  1. Update

    Merge branch 'develop' into main

    Update · 2026-09-21

    a01336956
  2. web

    Web surface update

    Open the plan page and sell only what production serves

    Update · 2026-09-21

    681c836be
  3. verification

    Verification system update

    Refresh the evidence ledger after the repaired sweep

    Update · 2026-09-21

    b64e70e7a
  4. verification

    Verification system update

    Re-measure the 46-pair golden sweep on the repaired observation profile

    Update · 2026-09-21

    c3f29350a

Recent changes

  1. verification

    Verification system update

    2026-09-21792654e03

    Observe Objective-C nil as the null tag

  2. verification

    Verification system update

    2026-09-21ae862eb98

    Declare the standard library the observation programs provide

  3. verification

    Verification system update

    2026-09-213d6054533

    Observe Objective-C booleans as BOOL rather than C _Bool

  4. verification

    Verification system update

    2026-09-204b0515995

    Refresh evidence ledger after native measurements

  5. verification

    Verification system update

    2026-09-20aa0e1292a

    Extend the native golden sweep to 46 language pairs

  6. verification

    Verification system update

    2026-09-205221909f7

    Refresh measurement report bindings and script graph

  7. verification

    Verification system update

    2026-09-2048747ecfa

    Record native execution evidence for 24 languages

  8. verification

    Verification system update

    2026-09-2053f06cfe7

    Declare division, operand order and index bases for systems languages

Earlier trail

  1. verification

    Verification system update

    Update · 2026-09-2016b0457e0

    Measure native execution for the C family, Go, Rust, Java and C#

  2. verification

    Verification system update

    Update · 2026-09-20f0bb71ff2

    Align the session bootstrap markers with the current agent rules

  3. Documentation update

    Update · 2026-09-20388528d4b

    Drop the model-generation gate from the agent rules

  4. Documentation update

    Update · 2026-09-19f961999d5

    Refresh the public changelog and codebase stats

  5. verification

    Verification system update

    Update · 2026-09-19923b8231c

    Resettle the reports behind the derived expectations

  6. verification

    Verification system update

    Update · 2026-09-190cff3dd1a

    Derive the stale public lineage expectations instead of pinning them

  7. verification

    Verification system update

    Update · 2026-09-1954f6edd07

    Carry the node type count into the coverage measurement and its derivations

  8. verification

    Verification system update

    Update · 2026-09-19e818bf8b8

    Resettle the derivations that read the regenerated lineage

  9. verification

    Verification system update

    Update · 2026-09-19701c4ea9e

    Regenerate the public lineage reports the owner approved

  10. Documentation update

    Update · 2026-09-18fcd63f6a8

    Rebuild the evidence ledger binding

  11. Documentation update

    Update · 2026-09-1841c3841db

    Refresh the public changelog and codebase stats

  12. verification

    Verification system update

    Update · 2026-09-187dd336d88

    Refresh the consumer differential and the report source graph

  13. verification

    Verification system update

    Update · 2026-09-188bfcd404d

    Refresh the golden lineage behind the registry citations

  14. Verification harness update

    Update · 2026-09-18b024ed469

    Run the depth readiness census inside the output credit chain

  15. verification

    Verification system update

    Update · 2026-09-18abe826627

    Reconverge the capability road cluster on the refreshed registry

  16. verification

    Verification system update

    Update · 2026-09-18473fbdf1f

    Classify the JS/TS projection frontier reason

  17. verification

    Verification system update

    Update · 2026-09-18e7a91def7

    Record the missing spec authority references

  18. verification

    Verification system update

    Update · 2026-09-1822f11af4e

    Regenerate the stale dev-only reports and the showcase surfaces

Lena Code · Hub