01 / Architecture as narrative
Make dependency direction explicit
The package chain gives an agent a way to judge where new imports and provider integrations belong. Architecture is described as a dependency constraint, beyond a directory listing.
Source excerpt starting at line 93.93The public dependency direction is `langflow → langflow-core → langflow-base → lfx`.
02 / Architecture as narrative
Distinguish a switch from enforcement
The authorization notes explain that enabling the interface alone does not introduce a deny policy. An agent changing permission-sensitive behavior must account for the registered implementation.
Source excerpt starting at line 112.112Default is **off**: `LANGFLOW_AUTHZ_ENABLED=false`. When enabled with only the OSS stub registered, every check returns allow — the stub is a no-op so routes stay wired and audit rows still flow. Real allow/deny requires a registered authorization plugin.
03 / Hard prohibitions
Protect identifiers stored in user data
Class names are part of saved-flow compatibility. A rename that looks local in Python can break existing documents, so the instruction calls it out as a persistent contract.
Source excerpt starting at line 147.147**IMPORTANT:** Changing a component's class name is a breaking change and should never be done. The class name serves as an identifier used to match components in saved flows and to flag them for updates in the UI. Renaming it will break existing flows that use that component.
04 / Verification by change type
Include the subpackage development environment
The test setup names the package whose development dependencies must be synchronized. A root install is not evidence that component test dependencies are present.
Source excerpt starting at line 198.198- When running tests inside a sub-package (e.g. `langflow-base`, `lfx`), sync that package's dev group first: `uv sync --group dev --package langflow-base`. The default `uv sync` only resolves the top-level workspace and may leave dev-only test deps (e.g. `fakeredis`) uninstalled.