> ## Documentation Index
> Fetch the complete documentation index at: https://docs.roboticks.io/llms.txt
> Use this file to discover all available pages before exploring further.

# IBM DOORS

> Round-trip requirements between IBM DOORS (Classic and Next) and Roboticks via ReqIF. DOORS Classic via ReqIF Studio; DOORS Next via OSLC and native ReqIF.

# IBM DOORS

IBM has two products with the DOORS name. Roboticks integrates with both, but they have different ReqIF workflows.

|                       | DOORS Classic (9.x)                     | DOORS Next                    |
| --------------------- | --------------------------------------- | ----------------------------- |
| ReqIF support         | Via the **ReqIF Studio** companion tool | Native (per module)           |
| Export mechanism      | Open module → ReqIF Studio plugin       | OSLC API or web export        |
| Recommended           | Use ReqIF Studio for round-trip         | Use native ReqIF              |
| Roboticks integration | Same connector, different upload step   | Same connector, native upload |

## Connector type and pricing

|       |                                                        |
| ----- | ------------------------------------------------------ |
| Type  | BYO requirements connector                             |
| Tier  | Team (3 BYO connectors included), Enterprise (bundled) |
| Price | **\$149 / connector / month** above the Team allowance |

You bring the DOORS license. Roboticks talks ReqIF only.

## DOORS Classic workflow

DOORS Classic has no first-party ReqIF support. The community-standard path is **IBM Rational ReqIF Studio** (sometimes shipped as DOORS-RIF), which exports modules to ReqIF and imports them back.

```mermaid theme={null}
%%{init: {"theme": "neutral", "themeVariables": {"primaryColor": "#4040ff"}} }%%
flowchart LR
    DC["DOORS Classic"] -->|Open module| RS["ReqIF Studio"]
    RS -->|Export ReqIF| Hub["Operator"]
    Hub -->|rbtk requirements upload| Plat["Roboticks"]
    Plat -->|with coverage| Hub2["rbtk requirements export"]
    Hub2 -->|Import via ReqIF Studio| DC
```

### Setup

<Steps>
  <Step title="Install ReqIF Studio">
    Get it from your IBM Passport Advantage portal. It's a Windows-only Eclipse-based tool.
  </Step>

  <Step title="Export a module">
    Open the DOORS module in ReqIF Studio → **Export → ReqIF**. Save the `.reqif` file. For modules with embedded OLE objects (rare in modern DOORS use), the export also produces a `.reqifz` zip.
  </Step>

  <Step title="Upload to Roboticks">
    ```bash theme={null}
    rbtk requirements upload module-export.reqif \
      --mode update \
      --field-map roboticks/doors-classic-mapping.yaml
    ```
  </Step>

  <Step title="Export back and re-import via ReqIF Studio">
    ```bash theme={null}
    rbtk requirements export --format reqif --with-coverage --out roboticks-export.reqif
    ```

    Open the exported file in ReqIF Studio → **Import → Merge into module**.
  </Step>
</Steps>

### DOORS Classic field mapping

```yaml theme={null}
# roboticks/doors-classic-mapping.yaml
workitem_types:
  Requirement: functional
  "Safety Requirement": safety
fields:
  "Absolute Number": id
  "Object Heading":  title
  "Object Text":     text
  "Compliance":      compliance
  "Verification Method": verification_method
link_modules:
  "Satisfied By":   confirmed_by
  "Derived From":   derives_from
```

## DOORS Next workflow

DOORS Next has native ReqIF — you can export from the web UI or via the OSLC REST API.

```mermaid theme={null}
%%{init: {"theme": "neutral", "themeVariables": {"primaryColor": "#4040ff"}} }%%
flowchart LR
    DN["DOORS Next"] -->|OSLC API or Web Export| Hub["CI Job"]
    Hub -->|rbtk requirements upload| Plat["Roboticks"]
    Plat -->|with coverage| Hub2["rbtk requirements export"]
    Hub2 -->|OSLC Import| DN
```

### Setup

<Steps>
  <Step title="Add the connector in Roboticks">
    **Settings → Integrations → Requirements → Add → DOORS Next**.
  </Step>

  <Step title="Get an OSLC export URL">
    In DOORS Next: open the module → **Configurations → Stream → Export → ReqIF → API URL**.
  </Step>

  <Step title="Author a DOORS Next field mapping">
    ```yaml theme={null}
    # roboticks/doors-next-mapping.yaml
    workitem_types:
      "http://open-services.net/ns/rm#Requirement": functional
      "http://acme.com/doors-next/types/safetyreq": safety
    fields:
      "dcterms:identifier": id
      "dcterms:title":      title
      "dcterms:description": text
      "rm:asilPL":          asil_pl
    ```
  </Step>
</Steps>

### CI recipe (DOORS Next)

```yaml theme={null}
# .github/workflows/doors-next-sync.yml
name: DOORS Next sync
on:
  schedule: [{ cron: "0 5 * * *" }]
  workflow_dispatch:

jobs:
  sync:
    runs-on: ubuntu-latest
    permissions: { id-token: write, contents: read }
    steps:
      - uses: actions/checkout@v4

      - name: Pull DOORS Next ReqIF export
        run: |
          curl -fsSL \
            -u "${{ secrets.DOORS_USER }}:${{ secrets.DOORS_TOKEN }}" \
            -H "Accept: application/x-oslc-cm-change-request+xml" \
            "https://doors.acme.com/rm/oslc/resources/rqm/module/4711.reqif" \
            -o doors-export.reqif

      - run: pipx install roboticks-cli
      - run: rbtk auth oidc-from-github
      - run: |
          rbtk requirements upload doors-export.reqif \
            --mode update \
            --field-map roboticks/doors-next-mapping.yaml

      - run: |
          rbtk requirements export \
            --format reqif --with-coverage \
            --out roboticks-export.reqif

      - name: Push back to DOORS Next
        run: |
          curl -fsSL \
            -u "${{ secrets.DOORS_USER }}:${{ secrets.DOORS_TOKEN }}" \
            -X POST -F "file=@roboticks-export.reqif" \
            "https://doors.acme.com/rm/oslc/imports/4711"
```

## DOORS-specific quirks

### Object IDs vs Absolute Numbers

DOORS Classic distinguishes the human-friendly **Object Identifier** (e.g., `REQ-001`) from the immutable **Absolute Number**. Use Absolute Number as `id` for stable round-trip; surface Object Identifier as a separate field if humans expect to see it.

### OLE objects in DOORS Classic

If your DOORS modules embed Word/Excel objects in `Object Text`, ReqIF Studio extracts them as attachments inside the `.reqifz` bundle. Roboticks ingests the bundle, stores attachments, and surfaces them in the requirement detail view — but they're not searchable text.

### DOORS Next configurations

DOORS Next has a Streams-and-Baselines configuration management model. Always export from a **named stream** (not the default), and pass the stream's name as `--baseline` to Roboticks so the configuration round-trips:

```bash theme={null}
rbtk requirements upload doors-export.reqif --baseline "ARM Controller Mainline"
```

### Link modules vs natively-typed links

DOORS Classic models links via separate **Link Modules** (one per relationship type). DOORS Next uses typed links inline. The field mapping handles both via the `link_modules` / `link_roles` keys.

## Round-trip caveats

<AccordionGroup>
  <Accordion title="DOORS Classic loses formatting on round-trip">
    Object Text is rich-text DOORS DXL. ReqIF Studio converts to XHTML; Roboticks converts to Markdown for storage and back to XHTML on export. Headings, lists, bold/italic, links survive. Tables, embedded objects, in-line images don't round-trip cleanly.
  </Accordion>

  <Accordion title="DOORS Next change sets and baselines">
    Always pin to a baseline for round-trip. Working off the mutable default stream means the ID-to-content mapping can shift mid-sync.
  </Accordion>

  <Accordion title="DXL scripting after import">
    If your DOORS module is augmented by DXL scripts post-import (e.g., auto-numbering), run them after the Roboticks re-import or wire the script to the import event.
  </Accordion>
</AccordionGroup>

## Validation

```bash theme={null}
# Count check
rbtk requirements list --output ids | wc -l
# Compare against DOORS module's Total Object Count
```

## Troubleshooting

<AccordionGroup>
  <Accordion title="`ReqIF Studio crashes on a large module`">
    Modules over \~5000 objects strain the Eclipse heap. Edit `ReqIFStudio.ini`: `-Xmx8g`. Or split the module via DOORS view filters and export in chunks.
  </Accordion>

  <Accordion title="DOORS Next OSLC returns 401">
    Use a Functional ID (technical user) — interactive sessions expire and SSO redirects break the API call. The connection's **Connection ID** is configured in **DOORS Next → Admin → Functional IDs**.
  </Accordion>
</AccordionGroup>

## Next

<CardGroup cols={2}>
  <Card title="Polarion" icon="diagram-project" href="/integrations/polarion">
    The other big mature RM tool.
  </Card>

  <Card title="rbtk requirements" icon="terminal" href="/cli/requirements-commands">
    Upload, coverage, export.
  </Card>
</CardGroup>
