Portal Community

Group ID (formGroupId)

RuleExample — CorrectExample — Wrong
Kebab-case, all lowercaseguard-railsGuardRails, guardRails
No underscoresnode-policiesnode_policies
Matches CategoryName (PascalCase) with hyphens replacing capswork-deskWorkDeskworkdesk
Stable — never rename after first form is created

FormCode

FormCode is the stable string identifier for a specific form. It is used in matrix dispatch, AI pattern matching, and NodeUsage lookup.

PatternExamples
{GroupName}_{FormPurpose}GuardRail_List, WorkDesk_List
{GroupName}_{SubType}_{Action}GuardRail_RateLimit_Edit, WorkDesk_Task_View
PascalCase throughoutGuardRail_ContentFilter_Edit
Action suffix: _List, _Edit, _View, _Audit, _WizardWorkDesk_Task_Edit

SQL File Naming

Each form's data file follows this pattern:

Atlas_Forms_{FormID}_{FormCode}.data.sql

-- Examples:
Atlas_Forms_13000_GuardRail_List.data.sql
Atlas_Forms_13001_GuardRail_Edit.data.sql
Atlas_Forms_15000_WorkDesk_List.data.sql
Atlas_Forms_15001_WorkDesk_Task_Edit.data.sql

The category data file follows:

{GroupName}_Category.data.sql

-- Examples:
GuardRails_Category.data.sql
WorkDesk_Category.data.sql

PrimaryUsage Value

RuleExample
Kebab-case, all lowercaseguardrails, workdesk, node-policies
One value per group — all forms in a group share itAll GuardRails forms: guardrails
Maps directly to a router tab keyguardrails → GuardRailsTab component

NodeUsage Value

RuleExample
Kebab-case, all lowercaseguardrail-edit, workdesk-task-edit
Null for list forms and dashboardsFormID 13000 (GuardRail_List) → NULL
Pattern: {group-id}-{action} or {group-id}-{subtype}-{action}guardrail-rate-limit
Must be unique across all groupsValidated at startup

FormID Range Assignment

Within a group's 100-ID range, assign IDs in this order:

OffsetPurposeExample (GuardRails)
+0List form (required, first)13000 — GuardRail_List
+1 to +79Property and wizard forms13001–13079
+80 to +89Dashboard forms13080–13089
+90 to +99Reserved for future expansion13090–13099
FormCode Is the AI's Primary Pattern Key The AI generation pipeline reads all existing FormCode values in a group to learn its naming patterns before generating a new form. If your FormCodes are inconsistent, the AI will produce names that do not match the group's conventions. Always follow the {GroupName}_{SubType?}_{Action} pattern.