Closes #1400 + #1401 · Milestone #113

# Bet A polish — mdx guard + schema rewrite

Two follow-ups from the first real /ork:design-ship dogfood (#1399)

## #1401 mdx-compile guard

Pre-build CI check that compiles every published .mdx file. Catches the class of bug that broke #1399 (nested same-length code fences in skill SKILL.md sources → unparseable JSX in generated mdx → next-build failure).

- scripts/test-mdx-compile.mjs (153 lines)
- tests/unit/test-mdx-compile.sh (88 lines, dual-direction TDD)
- tests/fixtures/nested-fence.mdx (counter-example)
- npm run test:mdx + tests/run-all-tests.sh wiring
- @mdx-js/mdx@^3 + remark-gfm@^4 as devDeps
- CONTRIBUTING-SKILLS rule: "Nesting code fences" with ❌/✅

## #1400 Orchestrator schema

The agent's expected schema diverged from reality. The first iteration assumed a JSON manifest with components[]; real bundles are gzipped tarballs with HTML prototypes + chat transcripts.

- src/agents/claude-design-orchestrator.md (Handoff Bundle Schema)
- How-to-parse section with tar-xzf + README-then-chats flow
- Fallback for incomplete bundles (no project/ dir)
- ?open_file= query param preference
- EDITMODE-as-annotation rule
- src/skills/design-import/SKILL.md Phase 1 prompt updated
- Outer fence switched to 4-backticks (eats own dogfood)

The bug, side-by-side

## Why the fence count matters in CommonMark

❌ #1399 had this — same-length fences don't nest

    ```python           # outer (3 backticks)
    prompt = f"""...
    ```tsx              # inner (3) — CLOSES the outer
    {component['scaffold']}
    ```                 # now opens a new tsx block
    {f"Adapt: {x}" if cond else ''}
    """
    ```                 # this is now stranded prose

→ MDX parses {f"..." ...} as JSX expression → acorn chokes
✅ This PR fixes it — outer fence is one longer

    ````python          # outer (4 backticks)
    prompt = f"""...
    ```tsx              # inner (3) — properly nested
    {component['scaffold']}
    ```
    {f"Adapt: {x}" if cond else ''}
    """
    ````                 # closes the outer at 4 backticks

→ Inner content stays inside the outer block; mdx compiles cleanly

## Local verification (run on every PR via npm test)

- npm run test:mdx → 253 mdx compiled cleanly + counter-example rejected
- npm run test:agents → all 37 valid
- npm run test:skills → SUCCESS
- npx vitest run → 7735 / 7735 pass
- npm run build → 105 skills, 37 agents, 180 hooks