# M127 Bundle — Vercel Labs 2026-04-29 adoption

Single bundled PR closing 5 of 7 open issues. Branch: `feat/m127-bundle`.
issues closed 5 research deferred 2 (#1564, #1566) files changed 9 tailscale prereq optional

## Issues closed by this PR

# | Title | Surface | Priority
--- | --- | --- | ---
1560 | json-render devtools panel hint in /ork:dev | boot.sh + dev SKILL | high (2.5)
1561 | /ork:dev --share via portless --tailscale | boot.sh + prereq rule | high (2.5)
1562 | portless monorepo zero-config | boot.sh is_monorepo() | med (2.0)
1563 | Clerk emulator in dep-to-emulator-map | emulate-seed JSON | med (2.0)
1565 | /ork:demo-producer --live (funnel + expiry) | demo-producer SKILL | low (1.5)

## New flag matrix on /ork:dev

Flag | Wraps | Reach | Tailscale CLI
--- | --- | --- | ---
(none) | portless <slug> <pkg> run dev | https://<branch>.localhost | not required
--share | portless --tailscale ... | tailnet members on *.ts.net | required
--funnel | portless --funnel ... | public on the internet | required
--live N | --funnel + N-hour expiry | public, tracked in jsonl | required

## Boot-time hints (auto-detected from package.json)

### @json-render/* detected

Prints the devtools adapter import line so the Spec/State/Actions/Stream/Catalog/Pick inspector can be enabled in dev. Tree-shakes from prod builds.

### turbo.json or workspaces detected

Switches to bare `portless` (zero-config). Auto-discovers each workspace dev script and assigns subdomains. State file shows `mode: "monorepo"`.

### @clerk/* detected

If `clerk` is in `emulate.config.yaml`, prints the mock login URL (http://localhost:4012). Else warns to run `/ork:emulate-seed --auto`.

## State file extension

    // .claude/state/dev-stack.json — new fields highlighted
    {
      "mode": "single",           // "single" | "monorepo"
      "share": {                      // null when not sharing
        "mode": "tailscale",    // "tailscale" | "funnel"
        "tailscaleUrl": "https://app.your-tailnet.ts.net",
        "expiresAt": "2026-05-03T20:00:00Z"  // only when --live N used
      }
    }

    // .claude/state/live-demos.jsonl — append-only audit log (#1565)
    {"branch":"feat/x","bootedAt":"...","expiresAt":"...","url":"..."}

## Holdouts (not in this PR)

- `#1564` spec-aware test assertions — needs research spike before commit
- `#1566` wterm-embedded playgrounds — blocked on `#1557` wterm decision (defer / track-only / build skill)

Brain-rendered playground for PR review. Source: feat/m127-bundle.