Features/MCP Workflows/DOORS/DOORS module migration from ReqIF

DOORS module migration from ReqIF

ReqIF is the format DOORS was built to exchange through, and exporting a module is routine work. No connector, no licence on your side, no CM feature to enable, and it runs air-gapped.

DOORSUploaded ReqIFWrites · gated

The problem this solves

Teams stay on DOORS because leaving it costs the links. A text or spreadsheet export carries the words and loses the attribute typing, the module structure and the entire link graph, so the trace has to be rebuilt by hand and nobody has the weeks. Every other route in is blocked on infrastructure the evaluating team does not control.

How it works

A whole DOORS module across from an export, with the links, and a list of every edge it had to cut. Works from the ReqIF a systems engineer can export today: no connector, no IBM licence on your side, and it runs air-gapped. Objects are classified into requirements, headings and informative text before anything is imported.

01
Report the file before mapping it
Module name, object count, hierarchy, every attribute definition with its datatype and how consistently it is filled, enumerated value sets, every link with its type, and the embedded content DOORS uses heavily and a naive copy destroys.
02
Classify the objects first
A DOORS module is a document, not a list. Requirements, heading and structure objects, and informative text are separated with the rule shown against ten real examples, because informative paragraphs imported as requirements poison everything downstream.
03
Preserve what the team cites
Object identifiers exactly, text verbatim, section numbering kept as an attribute. Their test procedures, code comments and supplier correspondence all cite those identifiers.
04
Account for every link
Derivation becomes hierarchy, verification links become verification linkage where both ends are in scope, unmappable types survive as attributes, and links leaving the export are reported as cut edges naming the modules they reach.

The prompt

You are migrating a DOORS module into the Dalus model [model name]
from a ReqIF export. The team is moving requirements off DOORS, or
evaluating whether they can. The standard the work is held to is
simple: nothing silently lost. Every object, every attribute, every
link in the export is either recreated in the model or reported as
not migrated with a reason. This workflow writes to the model, and
only after an approved dry run.

INPUT: a ReqIF or ReqIFZ file exported from DOORS or DOORS Next. If
the user has a CSV or Excel export instead, say plainly what is lost
in that path (attribute typing, link data, object hierarchy in some
exports) and offer to proceed anyway or wait for a ReqIF. If nothing
is attached, ask for it before doing anything else.

CONFIRM FIRST, in one message: which Dalus model; whether this is a
first migration or a re-import of a later export of the same module;
where the requirements should sit in the model; and whether the whole
module or a filtered subset is in scope. Ask anything else you need
in the same message. Then begin.

READ THE FILE COMPLETELY BEFORE WRITING ANYTHING, and report what is
in it before proposing any mapping:
- The module or specification name, and how many objects it holds.
- The object hierarchy exactly as DOORS holds it, including
  heading objects, which are structure rather than requirements.
- Every attribute definition in the export, with its datatype and
  how consistently it is populated. DOORS projects carry dozens of
  custom attributes and they are the team's process made visible,
  so none of them disappears without a decision.
- Enumerated attribute values and their defined value sets.
- Every link in the export, with its link type or relation group,
  and whether both ends are inside this export or point outside it.
- Any embedded OLE objects, images, tables or rich text, which
  DOORS uses heavily and which do not survive a naive text copy.

CLASSIFY THE OBJECTS before mapping. A DOORS module is not a list of
requirements: it is a document. Separate:
- Requirement objects: objects carrying binding statements.
- Heading and structure objects: section titles and numbering.
  These become hierarchy in the model, not requirements.
- Informative objects: notes, figures, context paragraphs,
  explanatory text between requirements. These are not
  requirements and must never be imported as such.
Show the counts per class and the rule you used to classify, with
ten real examples, before importing anything. Where the module has an
attribute that already distinguishes object types, use it and say so.
Where it does not, classification is a judgment and the user approves
it.

MAPPING RULES:
- The DOORS object identifier becomes the Dalus customer ID,
  preserved exactly. Never renumber. The team's documents, test
  procedures, code comments and supplier correspondence all cite
  these identifiers, and a migration that breaks them breaks
  everything downstream of it.
- Object text is copied verbatim. Never paraphrase, never correct
  grammar, never expand abbreviations, never merge or split
  objects. This is contractual wording.
- The DOORS module hierarchy becomes requirement hierarchy in the
  model. Preserve section numbering as an attribute so the original
  document position is recoverable.
- Every custom attribute is mapped to a model attribute or
  explicitly listed as dropped, with the user deciding each one.
  Present this as a mapping table for approval. Pay attention to
  the ones that carry process meaning: verification method,
  criticality, safety classification, allocation, status, source.
- Enumerated values are preserved as the team wrote them. Never
  normalise "Test" and "TEST" into one value without saying so.
- Rich content: convert tables and formatted text as faithfully as
  the model allows, and report every object whose content could not
  be carried across, with its identifier, so nothing is lost
  invisibly. Never summarise an image or a diagram into prose.
- Dalus lifecycle status is set to In Work for everything.
  Arriving in a new tool is not the same as being reviewed there.
  The original DOORS status is kept as an attribute.
- Provenance: every migrated requirement records the module name,
  the export date, the baseline if the export names one, and the
  original object identifier and absolute number.

LINK RULES, the part migrations lose and the reason teams stay on
tools they dislike:
- Links whose type expresses derivation or parentage become
  requirement hierarchy or derive links in the model.
- Links to test or verification objects become verification linkage
  where the other end is also in scope, and are otherwise recorded
  as pending with the original target identifier preserved.
- Link types with no model equivalent are recorded as attributes on
  both ends, so the connection survives even where it cannot yet be
  first class.
- Links pointing to modules outside this export are never silently
  dropped. Report them as a cut-edge list, each naming the object
  inside scope, the target identifier and module outside scope, and
  the link type. This list tells the team exactly where their trace
  boundary now sits, and it is the single most important output of
  the migration after the requirements themselves. Where the
  outbound links cluster into a handful of other modules, name them,
  since those are the modules that need migrating next.

DRY RUN, before any write: object counts by class; the attribute
mapping table; the link type mapping table; the first five and last
five requirements in full exactly as they will land, with attributes
and provenance; every ID collision with the existing model; the
cut-edge list; the unconvertible-content list; and every attribute
marked for dropping. Reconciliation arithmetic up front:
  objects in export = requirements + headings + informative + skipped
  links in export = recreated + recorded as attributes + cut edges
If the numbers do not reconcile, stop and say so. Suggest importing
into a branch so the whole migration can be discarded in one step.
Wait for approval.

MIGRATE in hierarchy order, parents before children, then create the
links. If anything fails partway, stop, report exactly what was
created and what was not, and do not improvise.

ON RE-IMPORT of a later export of the same module: match on the
DOORS object identifier, never on text. Report new objects, changed
objects with both texts shown, unchanged objects, and requirements in
the model whose identifier no longer appears in the export. Never
delete a requirement because DOORS no longer has it: report it,
because a removed requirement is a scope change someone has to
notice, and in a supplier relationship it may be a contractual one.

AFTER MIGRATION, THE ALLOCATION PASS, proposals only. This is the
part DOORS never gave them: for each migrated requirement, propose an
allocation to the part, connection or interface in the model that
would satisfy it, with a one-sentence rationale naming the specific
evidence and a confidence level. Lead with the requirements you
cannot place at all, because that list is the real finding: either
the architecture is missing something, or the requirement was never
satisfiable. Allocations are accepted individually, never in bulk. A
guessed trace link is worse than none, because someone has to
disprove it later.

FINAL REPORT: the reconciliation arithmetic repeated against actuals;
what was recorded as attributes awaiting a first-class home; the
cut-edge list with the modules it points at; the dropped-attribute
list; the unconvertible content; the allocation proposals and their
state; and any quality findings noticed in passing (duplicate text,
untestable wording, TBDs, objects with no text) as findings only,
never as edits to migrated wording. Offer, do not execute: migrating
the modules the cut edges point at, generating a specification
document from the migrated set so the team can compare it against
their DOORS output side by side, and re-importing a later export as a
drift check if DOORS stays running in parallel during the transition.

Replace the [bracketed] placeholders with your model and project names.

What you get

Requirements with DOORS identifiers, text and attributes preserved
Cut-edge list, with the outside modules the links cluster into
Dropped-attribute and unconvertible-content lists, nothing lost silently
Allocation proposals afterwards, led by the requirements nothing can satisfy
Dalus + Uploaded ReqIF

Works from a ReqIF or ReqIFZ export from DOORS Classic or DOORS Next, which any systems engineer can produce without a connector, an IBM licence on your side, or a CM feature enabled. It runs air-gapped. Offered a CSV or Excel export instead, it says plainly what that path loses before proceeding.

Nothing is written until you approve it. The prompt carries the gate: the agent shows the full change set and waits, whether the target is the model or a system it reaches through a connector.

Common questions

Why ReqIF rather than a live DOORS connection?
Because exporting a module is routine work a systems engineer does without asking permission, and it needs nothing you do not already have. ReqIF also carries the attributes, the structure and the link data, so the migration is faithful rather than a text dump. It works identically for DOORS Classic and DOORS Next.
What happens to links into other modules?
They are reported as cut edges, each naming the object inside scope, the target identifier and module outside it, and the link type. Where they cluster into a handful of modules, those are named, because that tells you which module to migrate next.
Can we re-import a later export?
Yes. It matches on the DOORS object identifier, never on text, and reports new, changed with both versions, unchanged, and identifiers that no longer appear. Nothing is deleted from the model because DOORS dropped it: in a supplier relationship a removed requirement may be a contractual change.