Skip to content

Identifiers ​

Every feature, profile, session, node, edge, subroutine, and workflow has an identifier (id) used in three representations of the entity:

  • its references in ◆ project.json;
  • any Python directory and module paths derived from it; and
  • its generated registry symbols and imports.

Leaf identifiers begin with an ASCII lowercase letter, contain only lowercase letters, digits, and single underscores, and end with a letter or digit. Python keywords and soft keywords, including match, case, and type, are reserved.

The double underscore separates components of generated identities. Nested definition paths use parent__child; automatically named edges use source__target, with __2, __3, and subsequent suffixes distinguishing parallel edges. A custom edge ID follows the leaf-identifier rules.

Feature, node, edge, profile, and session identifiers are scoped to their owning definition. Generated GraphId values prefix a definition path with the package name: subroutine main in package demo.countdown becomes demo.countdown.main. Workflow and subroutine IDs occupy separate namespaces, so both may use main.

Renaming changes an identifier while preserving the entity; Deletion removes the entity and releases its identifier for reuse.