Important: Property names must exactly match what you configure in Step 4 constraints.
Tips
Ensure value skills cover all entity requirements
Set realistic capacity values
For time slots, ensure you have enough to cover all entities
Common Issues
Issue
Cause
Solution
"Please add at least one resource"
No values
Add values to each variable
Skill mismatch later
Values lack required skills
Add skills that entities need
Not enough values
Too few options
Add more values
Step 4: What Are Your Rules? (Constraints)
Screenshot: Step 4 Modal
Purpose
Define the rules your solution must follow. These are your constraints.
Constraint Levels
Tab
Level
Color
Meaning
Hard Constraints
Hard
🔴 Red
Must be satisfied — violations make solution invalid
Medium Constraints
Medium
🟡 Yellow
Should be satisfied — significant penalty
Soft Constraints
Soft
🟢 Green
Nice to have — minor penalty
Adding Constraints
Click the appropriate tab (Hard/Medium/Soft)
Click "Add Constraint"
Fill in the constraint form:
Field
Description
Name
Descriptive name (e.g., "Skill Match")
Rule
Select constraint rule type
Target Variable
Which variable this applies to
Weight
How important (higher = more important)
Description
Optional explanation
Available Constraint Rules
Rule
What It Does
Required Properties
unassigned
Penalize unassigned entities
None
skill
Match required skills
Entity: skills, Value: skills
capacity
Don't exceed capacity
Value: capacity
cost
Minimize total cost
Entity: duration, Value: hourlyRate
balance
Distribute workload evenly
None
time
Respect time windows
Entity: deadline, Value: availability
no_conflict
Prevent overlapping assignments
Uses timeslot variable
availability
Respect availability
Value: availability
preference
Honor preferences
Entity: preferred[Variable]
Configuring Constraints with Custom Properties
When using custom properties (defined in Steps 2 and 3), you need to tell the constraint which property names to use:
Skill Constraint with Custom Properties
For the skill rule, expand the constraint card to see additional fields:
Field
Description
Example
Entity Skills Property
Property name on entity containing required skills
requiredResourceType
Value Skills Property
Property name on value containing available skills
resourceTypes
Example Configuration
Name: Resource Type Match
Rule: skill
Target Variable: server
Entity Skills Property: requiredResourceType
Value Skills Property: resourceTypes
Weight: 10
This constraint ensures entities with requiredResourceType: "gpu" are only assigned to values where resourceTypes contains "gpu".
Constraint Property Reference
Constraint
Entity Property Field
Value Property Field
skill
entitySkillsProperty
valueSkillsProperty
capacity
demandProperty
capacityProperty
cost
durationProperty
rateProperty
distance
entityLocationProperty
valueLocationProperty
preference
entityPreferenceProperty
valuePreferenceProperty
Important: Property names are case-sensitive and must exactly match your data.
Weight Guidelines
Weight
When to Use
1-10
Low priority within level
10-100
Normal priority
100-1000
High priority
1000+
Critical (consider making hard)
Tips
Start with hard constraints (must-haves)
Add unassigned constraint to ensure all entities get assigned
Use weights to prioritize within the same level
Test with fewer constraints first, then add more
Common Issues
Issue
Cause
Solution
"Please add at least one rule"
No constraints
Add at least one constraint
Missing targetVariableId error
Constraint not configured
Select target variable
Solution always infeasible
Too many hard constraints
Convert some to medium/soft
Step 5: Any Pre-Decisions? (Pinned Assignments)
Screenshot: Step 5 Modal
Purpose
Review and manage pinned assignments — entities that are already assigned and should not be changed by the solver.
When to Use Pinning
Scenario
Example
Confirmed assignments
"Sarah is already confirmed for Monday shift"
Partial re-optimization
"Keep existing assignments, just fill gaps"
Specific requirements
"Task X must go to Alice"
Testing
"Lock this assignment and see what happens"
How Pinning Works
In Step 2: Check the 🔒 Pinned checkbox on an entity card
In Step 2: Select the pre-assigned value
In Step 5: Review all pinned assignments
The solver will never change a pinned assignment.
Tips
Only pin what's truly fixed
Too many pins limit solver flexibility
Check that pins don't conflict with hard constraints
Common Issues
Issue
Cause
Solution
Pinned assignment causes infeasibility
Pin conflicts with constraint
Unpin or adjust constraints
Can't find entity to pin
Not marked in Step 2
Go back to Step 2 and mark as pinned
Step 6: How Long Should We Search? (Solver Settings)
Screenshot: Step 6 Modal
Purpose
Configure how long the solver should run and other optimization settings.
Longer timeouts generally produce better solutions
Diminishing returns after a certain point
Start with Standard, adjust based on results
For testing, use Quick to verify setup
Common Issues
Issue
Cause
Solution
"Please set a valid timeout"
Invalid value
Set timeout between 10-3600
Solver times out with poor solution
Timeout too short
Increase timeout
Solver runs too long
Timeout too long
Reduce timeout
Step 7: Review & Validate JSON
Screenshot: Step 7 Modal
Purpose
Final review of your problem configuration. Validate, optionally improve with AI, and solve.
The JSON Editor
The large text area shows your complete problem as JSON. You can:
Review the configuration
Make manual edits if needed
Copy the JSON for external use
Validation
Click "Validate JSON" to check for errors:
Result
Indicator
Meaning
✅ Valid
Green "Success" alert
Ready to solve
❌ Invalid
Red "Error" alert
Fix errors before solving
Common Validation Errors
Error
Cause
Fix
"entities array is required"
No entities
Go back to Step 2
"valueRanges object is required"
No values
Go back to Step 3
"variables array is required"
Problem type issue
Check Step 1
"Invalid JSON syntax"
Manual edit error
Fix JSON syntax
"Constraint X missing targetVariableId"
Incomplete constraint
Edit constraint in Step 4
AI Improvement Feature
Click "Improve with AI" to get AI-powered suggestions:
AI analyzes your problem
Shows loading indicator while processing
Displays improvement suggestions
Shows improved JSON for comparison
Button
Action
Apply Improvements
Use AI suggestions
Discard
Keep original
Save AI Improvement
Download AI version
Reset to Original
Undo AI changes
Solving from Step 7
After validation succeeds, you can:
Click "Done" to close the wizard
On the main dashboard, click "Solve" button
Or use the API to submit the problem
Solution View
Screenshot: Solution View
After solving, view your results:
Solution Summary
Field
Description
Job ID
Unique identifier for this solve
Status
SOLVING, COMPLETED, FAILED
Score
Solution quality (e.g., "0hard / -50soft")
Duration
How long solving took
Score Interpretation
Score: 0hard / -2medium / -450soft
│ │ │
│ │ └── Soft penalties (lower is better)
│ └── Medium violations
└── Hard violations (must be 0!)
Score Component
Meaning
0hard
✅ Solution is valid (feasible)
-Xhard
❌ Solution is invalid — X hard violations
-Ymedium
Y medium constraint penalties
-Zsoft
Z soft constraint penalties
Export Options
Format
Button
Use For
JSON
"Copy JSON"
Integration with other systems
Excel
"Export to Excel"
Sharing with stakeholders
Domain Attributes Registry
NEW in v1.5 — The Domain Attributes Registry provides a structured way to manage custom properties, replacing error-prone free-text input with validated dropdown selections.
What is the Domain Attributes Registry?
The Domain Attributes Registry is a central panel that appears in Steps 2 and 3 of the wizard. It allows you to:
Define custom attributes for entities and values
Select attributes from dropdowns when configuring constraints
Validate that your data has the required properties
Track which attributes are used in constraints
Why Use Domain Attributes?
Before (Free Text)
After (Domain Attributes)
Type cpuRequried (typo!)
Select cpuRequired from dropdown
No validation until runtime
Real-time usage statistics
Property names case-sensitive
Consistent, validated names
No documentation
Self-documenting schema
The Three-Step Connection
Domain Attributes create a powerful link between Steps 2, 3, and 4:
Click on a completed step in the progress indicator
Keyboard Shortcuts
Shortcut
Action
Enter
Confirm / Next
Escape
Cancel / Close
Ctrl+S
Save
Custom Properties Reference
This section provides a complete reference for using custom properties throughout the Planning Wizard.
What Are Custom Properties?
Custom properties are domain-specific attributes that go beyond standard fields. They allow you to model any type of planning problem with your own terminology and data structures.
Standard Properties:id, name, skills, capacity, duration, deadline Custom Properties:requiredResourceType, cpuCores, memoryGB, gpuCount, etc.
Automatic Detection
When you load a JSON file or import data, the wizard automatically detects custom properties:
Scans all entities and values for non-standard property names
Determines the appropriate field type based on data
Creates editable fields in the card UI
Preserves all properties during save/export
Field Type Detection
Data Type
Example Value
UI Field Created
Number
32, 128.5
Number input
String
"gpu", "high-memory"
Text input
Array
["java", "python"]
Text input (comma-separated)
Boolean
true, false
Checkbox
Property Naming Best Practices
✅ Good
❌ Avoid
Why
requiredResourceType
type
Descriptive, clear purpose
cpuCores
cpu
Includes unit
memoryGB
mem
Self-documenting
maxCapacity
cap
Readable
Naming Rules:
Use camelCase consistently
Be descriptive (not abbreviated)
Include units where applicable (GB, Hours, etc.)
Match exactly between entities, values, and constraints (case-sensitive)
Complete Constraint Properties Reference
Each constraint type can reference custom properties. Here's the complete reference: