Appearance
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.