{
  "schema": "leumas.docs.page/1",
  "id": "skill:leumas-studio#domains/body",
  "slug": "skills/leumas-studio/domains/body",
  "kind": "tools",
  "bucket": "skill",
  "title": "Body — what you can do",
  "name": "Body",
  "eyebrow": "what you can do",
  "chip": null,
  "summary": "<!-- GENERATED by ops/tools/skill-sync — do not edit by hand. Run pnpm skills:sync. -->",
  "keywords": [
    "leumas-studio",
    "fetch remember",
    "skill-sync",
    "pnpm",
    "skills",
    "edit",
    "hand",
    "generated"
  ],
  "audience": "both",
  "funnel": {
    "product": null,
    "cta": null
  },
  "body": "<!-- GENERATED by ops/tools/skill-sync — do not edit by hand. Run `pnpm skills:sync`. -->\n\n# Body — what you can do\n\n`/admin/d/body` · pillar `apps`\n\nExplore a sourced anatomical graph in 3D — structures, typed relationships, systems, path tracing, lessons and a tutor that answers from the graph.\n\n## Fetch this, never remember it\n\nThese change per install and per release. Call for them - a list written here would be a future lie.\n\n| What | Call | Why |\n|---|---|---|\n| which bodies this install actually has | `GET /api/body/species` | the atlas is species-agnostic and an install may have more than the two Leumas ships. Never assume \"human\" — and never assume its variants are male and female, because a species defines its own. |\n| what a structure is, in full, with its sources | `GET /api/body/:species/:variant/structures/:id` | this is the one call that returns parents, children, blood supply, drainage, innervation and provenance together. Assembling it from four calls gets the de-duplication wrong: the same fact reaches the graph from several directions and this endpoint merges the evidence rather than printing the phrenic nerve three times. |\n| whether this install can DRAW a structure | `GET /api/body/:species/:variant/model-manifest` | `schematic: true` means the geometry is primitives at roughly the right position — not organ shape. Any surface or answer that shows it must say so. A structure absent from `structures` here is fully usable and simply not drawable. |\n| the closed relationship vocabulary | `GET /api/body/relations` | a traversal filtered on an invented type returns nothing and looks like a data gap. These are the only 64 that exist. |\n| what this install may redistribute | `GET /api/body/licenses` | Uberon and OpenStax are both CC BY — attribution is a condition, not a courtesy. The manifest also records what was deliberately NOT taken and why. |\n\n## How to actually do things here\n\nWritten by hand, because the order and the traps are the part no file can derive.\n\n### Answer an anatomy question factually\n\n1. `POST /api/body/:species/:variant/ask` with `{ question }`.\n2. Read `facts` — that is the graph's answer. Read `sources` — that is where it came from.\n3. Apply `visualActions` to the viewer if one is open, so what you say and what is highlighted cannot disagree.\n\n**Trap:** Do NOT answer from memory when this returns `answerable: true` — the whole point is that the claim is traceable. When it returns `answerable: false`, `note` says why: an unresolved name, or a route the dataset does not record. Report that rather than filling the gap.\n\n### Find a structure by name\n\n1. `GET /api/body/:species/:variant/search?q=…` and read `how` on the top result.\n2. Use the `id`, never the name, for everything downstream.\n\n**Trap:** `how: \"fuzzy\"` is a SUGGESTION, not a resolution — \"femer\" scores the same against \"femur\" as \"ileum\" does against \"ilium\", so no threshold can separate a helpful correction from a dangerous one. The resolver refuses to promote a fuzzy hit and so must you.\n\n### Answer \"which bones are in the hand\"\n\n1. `GET /api/body/:species/:variant/structures/:id/contains?category=bone` with the hand's id.\n2. Or `POST /api/body/:species/:variant/ask` with the question and let it resolve the container.\n\n**Trap:** Never write the list down. It is derived from the graph, it differs between variants, and it changes when the dataset is refreshed. `within` accepts a structure, a REGION or a SYSTEM id — the hand resolves to a region, and a containment walk from a region id would return nothing if the endpoint did not handle all three.\n\n### Trace a flow — blood, air, food, urine\n\n1. `POST /api/body/:species/:variant/path` with `{ from, to }`.\n2. Read `steps` for the typed hops and `nodes` for the route.\n\n**Trap:** The default relation set is FLOW only, deliberately: including `part_of` would let a path claim that blood travels from the heart to the thorax. `found: false` means those edges are not recorded — it is never evidence that no route exists in the body.\n\n### Compare two bodies\n\n1. Load both variants and diff their structure sets, or call the app action `compareVariants`.\n2. Restrict with `system` to make the answer readable.\n\n**Trap:** Shared anatomy keeps the SAME canonical id across variants, which is what makes a diff meaningful and a selection survive a switch. A structure missing from one side is absent from that body, not hidden in it.\n\n### Add another species\n\n1. Write `data/species/<id>/ingest.profile.json` (from an ontology) or the five dataset files by hand.\n2. Add the id to `SHIPPED_SPECIES` in `shared/packages/body/data/species/index.js`.\n3. `node ops/tools/anatomy-ingest/index.mjs update uberon --species <id>` then `… validate`.\n\n**Trap:** No engine code changes, and that claim is enforced: `test/cross-species.test.js` loads the synthetic `test-organism` through the same path and asserts every surface works on it. A dataset that does not validate is NOT written — replacing biology with something unvalidated is worse than shipping the previous release.\n\n## Tabs\n\nEvery one is a real URL. A tab with its own section below carries a real job.\n\n| Tab | Path | Group | What it is for |\n|---|---|---|---|\n| `(index)` | - | - | - |\n| `tree` | - | - | - |\n| `graph` | - | - | - |\n| `lessons` | - | - | - |\n| `sources` | - | - | - |\n\n## API\n\nMounted prefixes that serve this domain: `/api/body`\n\nThe full route table is `leumas-capabilities/reference/api-routes.md`.\n\n",
  "source": {
    "path": ".claude/skills/leumas-studio/reference/domains/body.md",
    "blobSha": "",
    "commit": "",
    "committedAt": "",
    "provenance": "no-git",
    "bytes": 5516,
    "hash": "83aae5873020f7e2ee4be2713ce3a8f40020a6e8"
  },
  "urls": {
    "html": "/p/skills/leumas-studio/domains/body",
    "json": "/docs/skills/leumas-studio/domains/body.json",
    "md": "/docs/skills/leumas-studio/domains/body.md"
  },
  "links": {
    "composes": [],
    "usedBy": [],
    "product": [],
    "howTo": [],
    "skills": []
  }
}
