backstage-techdocslisted
Install: claude install-skill bendaamerahmed/backstage-idp-plugin
# Backstage TechDocs
Wire the docs-like-code pipeline correctly, and tell apart the four places it breaks: the entity annotation, the mkdocs source, the generator, and the publisher.
## Preconditions
- Release line from `backstage.json`; TechDocs packages resolved with `yarn why @backstage/plugin-techdocs-backend` and `yarn why @techdocs/cli`.
- Backend generation: `backend.add(import('@backstage/plugin-techdocs-backend'))` in `packages/backend/src/index.ts` is the new backend system; a `createRouter` in `packages/backend/src/plugins/techdocs.ts` is legacy — migrate it (`backstage-plugin-migrate`) before adding a build-strategy module.
- Frontend generation: NFS (default since v1.49) registers TechDocs and its addon modules as `features` from `/alpha` exports; legacy has `TechDocsIndexPage`/`TechDocsReaderPage` inside `<FlatRoutes>` and an `EntityTechdocsContent` tab in `EntityPage.tsx`.
- The **effective merged** config, not `app-config.yaml` alone: `yarn backstage-cli config:print --lax`. Production almost always overrides `techdocs.*` in `app-config.production.yaml`.
- Whether the runtime has Docker (for `runIn: docker`) or Python with `mkdocs-techdocs-core` (for `runIn: local`).
## Procedure
1. **Read the triple before anything else.** `techdocs.builder`, `techdocs.generator.runIn`, `techdocs.publisher.type` determine which failures are even possible.
- `builder: 'local'` — the backend generates and publishes on demand when a user opens the docs tab. Out-of-the-bo