PowerSolver 2.0 Wizard User Guide
This guide walks you through every screen of the Planning Wizard with detailed explanations, tips, and troubleshooting.
2.0 changes: The 1.x "Time Grain" toggle in Step 1 is now Sequence Mode. Step 3 has a new Sequence Configuration card (host-fact picker + derived-shadow table). Step 7 emits the §5bis JSON shape. 1.x saved sessions cannot be loaded — re-author through the wizard. The full markdown source for this page lives at ../WIZARD_USER_GUIDE.md.
Overview
The Planning Wizard has an optional AI front door (Step 0) plus 7 authoring steps:
┌──────────────────────────────────────────────────────────────────────────────────┐
│ Step 0 Step 1 Step 2 Step 3 Step 4 Step 5 Step 6 Step 7 │
│ AI Define List Define Define Pinned Solver Review │
│ Intake Problem Entities Values Rules Assign Settings & Solve │
└──────────────────────────────────────────────────────────────────────────────────┘
| Step | Title | Purpose | Required? |
|---|---|---|---|
| 0 | AI Intake | Describe the problem in plain language; PowerAI generates a full §5bis spec that pre-fills Steps 1–7 | ❌ Optional |
| 1 | Define Your Problem | Problem type + Sequence Mode toggle | ✅ Yes |
| 2 | What Needs Scheduling? | Enter your entities (tasks, shifts, etc.) | ✅ Yes |
| 3 | Who or What Can Do It? | Enter your hosts/values + §5bis sequence config | ✅ Yes |
| 4 | What Are Your Rules? | Define constraints | ✅ Yes |
| 5 | Any Pre-Decisions? | Lock specific assignments | ❌ Optional |
| 6 | How Long Should We Search? | Configure solver timeout | ✅ Yes |
| 7 | Review & Validate JSON | Final check and solve | ✅ Yes |
Getting Started
Login Screen
| Field | Description |
|---|---|
| Username | Your PowerSolver username |
| Password | Your password |
After logging in, you'll see the main dashboard.
Main Dashboard
The dashboard shows:
| Element | Description |
|---|---|
| Open Wizard button | Start a new problem or continue editing |
| JSON Preview panel | Shows your current problem configuration |
| AI Configuration sidebar | Select AI provider and model |
| File Operations sidebar | Save/load problem files |
Sidebar Controls
| Control | What It Does |
|---|---|
| File Name | Name your problem file |
| AI Provider dropdown | Select DeepSeek, Groq, etc. |
| AI Model dropdown | Select the AI model |
| API Key Status | Shows if AI is configured |
| Dark Mode toggle | Switch light/dark theme |
Step 0: AI Intake — the cornerstone of the AI integration
Step 0 is the GenAI front door to the entire wizard. Instead of hand-authoring entities, variables, shadows, and constraints across Steps 1–6, you describe your problem in plain business language and PowerAI generates a complete §5bis specification. The wizard loads that spec into Steps 1–7 where you review and refine every field before solving. It is optional — skip it to author manually from Step 1 — but for most users it is the fastest path from "I have a scheduling problem" to "I have a solved schedule".
How it works end-to-end
You answer 5 questions
│
▼
Each answer → PowerAI validates it (HITL) → shows you its interpretation → you confirm
│
▼ (all required answers confirmed)
Click "Generate" → PowerAI runs the generation pipeline
│ (generation_intent → generation_spec → validate → repair)
▼
PowerAI returns a §5bis JSON spec
│
▼
Wizard imports it via importProblem() → Steps 1–7 are pre-filled
│
▼
You review / edit any field, then Solve in Step 7
The 5 intake questions
The intake form asks five qualitative questions. Each builds context for the next — PowerAI sees your earlier confirmed answers when interpreting later ones.
| # | Question | What to put here | Required? |
|---|---|---|---|
| 1 | Describe your planning or scheduling problem | The business context — the organisation, the people/things involved, what makes it challenging. | ✅ Yes |
| 2 | What are the things being scheduled or assigned? | Your entities — tasks, orders, lessons, shifts, jobs, customer visits. Include key properties (duration, priority, skill level, location). | ✅ Yes |
| 3 | What resources or slots can they be assigned to? | Your hosts — employees, machines, vehicles, crews, rooms. Include their properties (start time, capacity, skills). | ✅ Yes |
| 4 | What rules and preferences must be respected? | The constraints. Spell out HARD rules (must never break) vs SOFT preferences. PowerAI maps your wording directly onto constraint type. | ✅ Yes |
| 5 | Any additional requirements? | Problem-type hints, solver timeout, pre-assigned items, business-specific logic. | ❌ Optional |
Write naturally. Numbers help ("45 nurses", "50 shifts per week") — PowerAI's validators check that the generated spec contains the counts you stated.
Human-in-the-Loop (HITL) validation
This is the part that makes Step 0 trustworthy. You do not answer all five questions then hope. Instead:
- You answer one question and click Validate.
- PowerAI reads your answer (plus all previously-confirmed answers as context) and presents its interpretation back to you — a short summary of what it understood.
- You either confirm (the answer locks, a green check appears, the next question unlocks) or edit and re-validate.
- Repeat until all required questions are confirmed.
Questions you haven't reached yet are locked (greyed out). Confirmed answers collapse into compact green cards with an edit pencil — click it to reopen and re-validate any earlier answer. By the time you click Generate, PowerAI has already shown you — and you've already approved — its understanding of every input. No surprises in the generated spec.
Choosing the AI provider and model
A provider/model picker sits near the top of Step 0:
- AI Provider dropdown — lists every provider with an API key configured in PowerAI Admin (OpenAI, Anthropic, DeepSeek, Groq).
- Model dropdown — the models available for the selected provider; the configured default is marked
(default).
If no provider is configured, the picker shows a warning linking to PowerAI Admin. The header badge shows the active provider/model pair once loaded. You can change provider/model any time before clicking Generate.
Generate
Once all required questions show green checks, the Generate button enables. Clicking it:
- Sends your confirmed intake context + chosen model to PowerAI's
/ai/generateendpoint. - PowerAI runs its multi-agent generation pipeline (intent extraction → spec generation → deterministic schema validation → LLM repair if validation fails).
- A progress bar tracks the pipeline stages live (streamed via Server-Sent Events).
- On success, the resulting §5bis JSON is imported into the wizard store — Steps 1–7 are now populated.
- The wizard advances you to Step 1 so you can review.
Long-running generation and recovery
Generation can take 30–90 seconds depending on model and problem complexity. The wizard handles this gracefully:
- The job id is stored in
sessionStoragewhile generation runs. - If you close the tab or refresh mid-generation, Step 0 detects the pending job on reload and resumes tracking it (or recovers a completed result). Pending jobs older than 30 minutes are discarded.
- If generation fails, Step 0 shows a clear error and you can retry — your confirmed answers are preserved.
What PowerAI generates
PowerAI's 2.0 prompts emit only the §5bis shape: collections with your hosts and entities, a list variable wiring them together, the previous + host built-in shadows, the canonical startTime / endTime derived shadows, and unassigned_count (hard) + minimize_property (soft) constraints.
PowerAI will never emit 1.x constructs (chained, schedulingPattern: TIME_GRAIN, timeGrainConfig, valueRanges). If the LLM slips, PowerAI's generation_repair agent catches it and corrects before the spec reaches the wizard.
After import — you are still in control
The generated spec is a starting point, not a final answer. Every field lands in Steps 1–7 as editable wizard state:
- Step 1 — the problem type and sequence-mode toggle PowerAI inferred
- Step 2 — the entities it extracted, with their properties
- Step 3 — the hosts and the §5bis sequence configuration
- Step 4 — the constraints it mapped from your rules description
- Steps 5–6 — pinned assignments and solver config
- Step 7 — the full JSON ready to review and Solve
Walk through each step. Adjust anything PowerAI got wrong. The HITL validation makes big misunderstandings rare, but the entity counts, property values, and constraint weights are all worth a human eye before solving.
Returning to Step 0
Click the "AI-Assisted Setup" entry in the wizard header to return to Step 0 at any time. Re-running intake replaces the current wizard state — if you've made manual edits in Steps 1–7, export them first (Step 7 → Download) so you don't lose work.
When to skip Step 0
Skip straight to Step 1 and author manually when:
- You already have a §5bis JSON file — use the header's Open button to import it directly.
- Your problem is tiny (2–3 entities) — manual entry is faster than describing it.
- You're iterating on a known problem and only changing a few values.
- No AI provider is configured in PowerAI Admin.
Step 1: Define Your Problem
Purpose
Tell PowerSolver what kind of problem you're solving. This step configures the wizard for your specific use case.
Fields
| Field | Required | Description | Example |
|---|---|---|---|
| Problem Statement | ✅ Yes | 1-2 sentences describing your problem | "I need to assign 20 development tasks to 5 developers over a 2-week sprint" |
| Success Criteria | ✅ Yes | What makes a solution "good" | "All tasks assigned, skills matched, workload balanced, deadlines met" |
| Problem Type | ✅ Yes | Select from dropdown | Task Assignment |
Problem Type Options
| Type | Icon | Best For |
|---|---|---|
| Vehicle Routing | 🚚 | Delivery routes, field service — Uses LIST variables |
| Employee Rostering | 📅 | Staff scheduling, shift planning — Uses BASIC variables |
| Task Assignment | 📋 | Project tasks, work orders — Uses BASIC variables |
| Maintenance Scheduling | 🔧 | Equipment maintenance — Uses BASIC variables |
| School Timetabling | 🎓 | Class schedules — Uses BASIC variables |
| Cloud Optimization | ☁️ | Server/resource allocation — Uses BASIC variables |
| Conference Scheduling | 🎤 | Event sessions — Uses BASIC variables |
| Job-Shop Scheduling | ⚙️ | Manufacturing jobs — Uses BASIC variables |
| Generic (Custom) | 🔧 | Custom problems — Configure manually |
Problem Type Info Card
When you select a problem type, an info card appears showing:
- Description of the problem type
- Examples of typical use cases
- Entity label (what you'll call your entities)
- Value label (what you'll call your values)
Buttons
| Button | Action |
|---|---|
| Cancel | Close wizard without saving |
| Save | Save current step and stay |
| Next | Save and proceed to Step 2 |
Tips
- Be specific in your problem statement — the AI advisor uses this to give better suggestions
- If unsure which problem type to choose, start with "Generic (Custom)"
- Your problem statement and success criteria are saved but don't affect the solver directly
Common Issues
| Issue | Cause | Solution |
|---|---|---|
| "Please fill in all required fields" warning | Missing field | Fill in all three fields |
| Wrong problem type selected | Misunderstanding | Review problem type descriptions |
Understanding "Consecutive on a host"
This is the setting that turns the wizard from a basic assignment tool ("Task A goes to Alice") into a real scheduler ("Task A goes to Alice from 09:00 to 09:30, then Task B from 09:30 to 10:15"). This subsection walks through what actually happens once you flip it on, using a small example you can paste into the wizard.
What you provide, and what PowerSolver fills in
When you turn on "Consecutive on a host", you describe a small handful of facts:
- The people, vehicles, or crews doing the work. For each one, you give the time their day begins (e.g. Alice starts at 09:00).
- The things being done. For each one, you give how long it takes (e.g. Login API takes 30 minutes).
That's it. You never type a start time for any task — only for the people. So how does the schedule know when each task starts?
PowerSolver fills it in. The moment it decides "Login API goes first on Alice's queue", it can compute:
- Login API's start time = Alice's start-of-day = 09:00.
- Login API's end time = its start + its duration = 09:00 + 30 min = 09:30.
And the moment it decides "Mobile shell goes after Login API on Alice's queue", it can compute:
- Mobile shell's start time = whatever the previous task on Alice's queue ended at = 09:30.
- Mobile shell's end time = 09:30 + 45 min = 10:15.
These auto-computed answers — the task's start time, its end time, the person it landed on, the task right before it in the queue — are called shadow variables. You see them on the Solution and Insights pages. You never enter them; they fall out of the placement PowerSolver chose.
The name "shadow" is meant literally: these values follow the schedule around. The instant PowerSolver moves a task from Alice to Bob, every shadow value attached to that task updates by itself — its host changes, its start time changes, the task before it changes — without you having to do anything.
Two kinds you'll see in Step 3
- The bookkeeping ones — which person is this task on?, which task is right before me? — are called built-in shadows. PowerSolver provides them for free as soon as you turn on "Consecutive on a host". You never write them.
- The two with a formula —
startTimeandendTime— are called derived shadows. They use the formulas you saw above: previous task's end time (or the person's start-of-day if I'm first), and my start + my duration. Click Apply default template in Step 3 once and both are set. For most scheduling problems you never touch them again.
If your problem needs something exotic — cumulative load along a delivery route, a custom time-window penalty — see Shadow Variables in the Concepts Guide. The wizard's UI for editing custom formulas is intentionally minimal in this release.
Worked example — 3 tasks, 2 developers
The inputs below match the shape of powersolver-template/task-assignment/1-variable.problem.json — you can import that file in the wizard to follow along live.
Tasks:
| Task | Priority | Duration |
|---|---|---|
| Login API | 1 (critical) | 30 m |
| DB Schema | 2 | 1 h |
| Mobile shell | 3 | 45 m |
Developers (both start their working day at 09:00 on 1 June 2026):
| Developer | startTime |
|---|---|
| Alice | 2026-06-01T09:00 |
| Bob | 2026-06-01T09:00 |
One feasible placement the solver might pick:
- Alice's queue: Login API → Mobile shell
- Bob's queue: DB Schema
The shadow values that come out of that placement:
| Entity | host | previous | startTime (computed) | endTime (computed) |
|---|---|---|---|---|
| Login API | Alice | — | host.startTime = 09:00 | 09:00 + 30m = 09:30 |
| Mobile shell | Alice | Login API | previous.endTime = 09:30 | 09:30 + 45m = 10:15 |
| DB Schema | Bob | — | host.startTime = 09:00 | 09:00 + 1h = 10:00 |
Or as a tiny timeline:
09:00 09:30 10:15
Alice │ Login API │ Mobile shell │
09:00 10:00
Bob │ DB Schema │
Every value in the last two columns was computed by the derived shadows — you didn't write a scheduler, you wrote two one-line expressions.
Why order matters
If the solver instead picked Alice's queue: Mobile shell → Login API, the shadows would say:
| Entity | startTime | endTime |
|---|---|---|
| Mobile shell | 09:00 | 09:45 |
| Login API | 09:45 | 10:15 |
Same makespan on Alice's queue, but Login API (priority 1 = critical) now starts at 09:45 instead of 09:00. That's why PowerSolver's default soft constraint targets a derived shadow called priorityCost (= position × (C − priority)): order is a real degree of freedom and the constraint guides the solver to put the highest-priority work at position 1 on each queue.
When not to use sequence mode
If your entities have no inherent order or duration — e.g. "assign this lesson to a room", with no back-to-back relationship between lessons — leave Sequence Mode off and use a basic variable instead. Sequence mode is for problems where what comes before me matters.
Step 2: What Needs Scheduling? (Entities)
Purpose
Enter the items that need to be assigned or scheduled. These are your planning entities.
Understanding Entities
| Problem Type | Entities Are... | Examples |
|---|---|---|
| Task Assignment | Tasks to complete | "Design homepage", "Fix bug #123" |
| Employee Rostering | Nurses/employees to schedule | "Sarah Mitchell", "James Chen" |
| School Timetabling | Lessons to schedule | "Math 101", "Physics Lab" |
| Maintenance Scheduling | Jobs to perform | "Motor inspection", "Oil change" |
| Vehicle Routing | Vehicles to route | "Truck 1", "Van 2" |
The Entity Cards Interface
Each entity appears as a card with:
- ID (required) — Unique identifier
- Name (required) — Human-readable description
- Properties — Additional fields based on problem type
Adding Entities
Method 1: Add One at a Time
- Click "Add Item" button
- Fill in the card fields
- Click ✓ to save or ✗ to cancel
Method 2: Import from File
- Click "Import from File" button
- Select Excel (.xlsx), CSV, or JSON file
- Map your columns to PowerSolver fields
- Review preview and click "Import Items"
Entity Properties
| Property | Used By | Description | Format |
|---|---|---|---|
| ID | All | Unique identifier | Text (e.g., "TASK-001") |
| Name | All | Human-readable name | Text |
| Duration | cost, time | How long it takes | Number (hours) |
| Skills | skill | Required skills | Comma-separated (e.g., "java, react") |
| Priority | Display | Importance level | high, medium, low |
| Deadline | time | Must complete by | DateTime |
| Start Time | time | Earliest start | DateTime |
| End Time | time | Latest end | DateTime |
Custom Properties
In addition to standard properties, PowerSolver supports custom properties for domain-specific data.
How Custom Properties Work
- Detection: Custom properties in your JSON are auto-detected
- Display: New fields are created for each custom property
- Editing: Edit custom property values just like standard fields
- Preservation: Custom properties are saved and exported correctly
Examples by Domain
| Domain | Custom Entity Properties | Used For |
|---|---|---|
| Cloud Computing | requiredResourceType, cpuRequired, memoryRequired | Resource matching |
| Manufacturing | machineType, toolingRequired, batchSize | Machine assignment |
| Healthcare | patientType, certificationRequired | Staff matching |
| Logistics | packageType, temperatureControl | Vehicle assignment |
Card Actions
| Icon | Action |
|---|---|
| ✏️ | Edit card |
| 🗑️ | Delete card |
| ↕️ | Drag to reorder |
| 🔒 | Toggle pinned status |
Pinned Assignments (Preview)
Check the 🔒 Pinned checkbox and select a value in "Pre-Assign To" to lock an assignment. The solver will not change pinned assignments.
Common Issues
| Issue | Cause | Solution |
|---|---|---|
| "Please add at least one item" | No entities | Add at least one entity |
| Duplicate ID warning | Same ID used twice | Use unique IDs |
| Import fails | Wrong file format | Use .xlsx, .csv, or .json |
| Missing required column | Column mapping wrong | Re-map columns in import dialog |
Step 3: Who or What Can Do It? (Values)
Purpose
Enter the resources that entities can be assigned to. These are your planning values.
Understanding Values and Variables
PowerSolver supports 1-4 value ranges (planning variables):
| Variables | Example Value Ranges |
|---|---|
| 1 variable | Developers |
| 2 variables | Developers + Time Slots |
| 3 variables | Developers + Time Slots + Rooms |
| 4 variables | Developers + Time Slots + Rooms + Equipment |
Each value range appears as a separate tab or section.
Value Properties
| Property | Used By | Description | Format |
|---|---|---|---|
| ID | All | Unique identifier | Text |
| Name | All | Human-readable name | Text |
| Skills | skill | What this resource can do | Comma-separated |
| Capacity | capacity | Maximum workload | Number |
| Availability | time | When available | DateTime range |
| Hourly Rate | cost | Cost per hour | Number |
| Start Time | time | Available from | DateTime |
| End Time | time | Available until | DateTime |
Custom Properties on Values
Values also support custom properties that define their capabilities:
| Domain | Custom Value Properties | Purpose |
|---|---|---|
| Cloud Computing | resourceTypes, cpuCores, memoryGB, gpuCount | Server capabilities |
| Manufacturing | machineCapabilities, toolsAvailable | Machine specs |
| Healthcare | certifications, specializations | Staff qualifications |
| Logistics | vehicleCapacity, hasRefrigeration | Vehicle capabilities |
Matching Entity and Value Properties
Custom properties create a matching relationship:
Entity (Workload): Value (Server): ├── requiredResourceType: "gpu" ←→ resourceTypes: ["gpu", "cpu"] ├── cpuRequired: 16 ←→ cpuCores: 32 └── memoryRequired: 64 ←→ memoryGB: 128
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)
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 |
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)
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)
Purpose
Configure how long the solver should run and other optimization settings.
Time Presets
| Preset | Icon | Timeout | Best For |
|---|---|---|---|
| Quick | ⚡ | 30 sec | Testing, small problems |
| Standard | ⏱️ | 120 sec | Most problems |
| Thorough | 🔍 | 300 sec | Complex problems, best results |
| Custom | ⚙️ | You choose | Specific requirements |
Problem Size Summary
The wizard shows a summary of your problem:
Entities: 20 tasks
Values: 6 developers × 10 timeslots
Constraints: 5 hard, 3 soft
Recommended timeout: 120 seconds
Custom Time Setting
If you select Custom:
- Use the slider to set timeout (10-600 seconds)
- Or type a specific value in the input box
- Maximum: 3600 seconds (1 hour)
Timeout Guidelines
| Problem Size | Entities | Recommended |
|---|---|---|
| Small | < 20 | 30 seconds |
| Medium | 20-100 | 60-120 seconds |
| Large | 100-500 | 180-300 seconds |
| Very Large | 500+ | 300-600 seconds |
Tips
- 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
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 |
|---|---|---|
| "collection X is empty" | No items in a collection | Add entries in Step 2 / Step 3 |
| "variable X: on Y is not a known collection" | Variable references missing collection | Add the collection in Step 3 |
| "variables array is required" | Problem type issue | Check Step 1 |
| "Invalid JSON syntax" | Manual edit error | Fix JSON syntax |
| "spec uses 1.x valueRanges/entities/chained" | Imported a v1 file | Re-author through wizard — no auto-conversion in 2.0 |
| "derivedShadow X: expression references Y with no known root prefix" | Missing this./previous./host. prefix | Add the prefix in Step 3's Sequence config |
| "LIST variable has no hard unassigned_count constraint" | Solver would return empty solution | Add 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
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 |
§5bis Sequence Configuration
When you flipped Sequence Mode on in Step 1, Step 3 shows a Sequence Configuration card with the host-fact picker, the derived-shadow table, and the Apply default template action. This card replaces the 1.x "Time Grain" configuration and Domain Attributes Registry panels.
Host-fact picker
The dropdown lists every variable in Step 3 with assignment type = list. Whichever you pick becomes the host collection — the items that OWN the ordered sequences. Most problems have exactly one list variable (auto-selected).
Apply default template
One click seeds the canonical §5bis derived-shadow pair on the entity collection:
{"name": "startTime",
"sources": ["previous.endTime", "host.startTime"],
"expression": "previous?.endTime ?? host.startTime"}
{"name": "endTime",
"sources": ["startTime", "this.duration"],
"expression": "startTime + this.duration"}
That pair computes back-to-back start and end times for every entity. The host needs a startTime property (e.g. 2026-06-01T08:00:00); each entity needs a duration property (ISO-8601 string like PT30M). Apply it once after enabling Sequence Mode — for most scheduling problems no further configuration is needed. What this actually does in practice → see Understanding "Consecutive on a host" in Step 1 for the worked example.
The derived-shadow table
Lists the currently registered derived shadows on the entity collection — name, expression, sources. Editing individual derived shadows in the UI is intentionally minimal in this release; for custom expressions (cumulative load, distance, custom time windows) edit the JSON in Step 7 or POST a §5bis spec directly to /api/solve.
What happened to Time Grain and Domain Attributes?
1.x had a TimeGrainConfig block (grain size, planning window) and a Domain Attributes Registry for typed properties. Both are removed in 2.0:
- Time Grain is replaced by derived shadows.
startTimeandendTimeare realLocalDateTimevalues computed per entity from the host's start time + the entity's duration. No fixed time-slot grid; no grain-size configuration. - Domain Attributes Registry was a 1.x typing layer. The 2.0 model uses each derived shadow's
sourcesarray as the structured contract — the solver knows which properties matter because the expressions declare them. Custom properties still work (any key in an entity'spropertiesbag) but there is no separate registry UI.
Navigation Tips
Progress Indicator
The step indicator at the top of each modal shows your progress:
[Step 1] ─ [Step 2] ─ [Step 3] ─ [Step 4] ─ [Step 5] ─ [Step 6] ─ [Step 7]
● ● ○ ○ ○ ○ ○
completed active upcoming
| State | Appearance |
|---|---|
| Completed | Filled circle, checkmark |
| Active | Highlighted, current step |
| Upcoming | Empty circle |
Saving Your Work
Your work is saved when you:
- Click "Save" on any step
- Click "Next" to proceed
- The wizard auto-saves periodically
Going Back
You can always go back to previous steps:
- Click "Previous" button
- Click on a completed step in the progress indicator
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Enter | Confirm / Next |
Escape | Cancel / Close |
Ctrl+S | Save |
Troubleshooting
Wizard Won't Open
| Cause | Solution |
|---|---|
| Not logged in | Log in first |
| Browser issue | Refresh page |
| JavaScript disabled | Enable JavaScript |
Lost My Work
| Cause | Solution |
|---|---|
| Didn't save | Use browser back, may recover |
| Browser crashed | Check auto-save in local storage |
| Session expired | Log in again, reload saved file |
AI Features Not Working
| Cause | Solution |
|---|---|
| No API key | Configure API key in Admin |
| Wrong provider | Select correct AI provider |
| Network error | Check internet connection |
Validation Keeps Failing
| Cause | Solution |
|---|---|
| Missing required data | Complete all required steps |
| Invalid JSON syntax | Check for typos in manual edits |
| Constraint errors | Review constraints in Step 4 |
Quick Reference
Step Summary
| Step | Required Input | Minimum |
|---|---|---|
| 1 | Problem statement, criteria, type | All 3 fields |
| 2 | Entities | At least 1 entity |
| 3 | Values | At least 1 value per variable |
| 4 | Constraints | At least 1 constraint |
| 5 | Pinned assignments | None (optional) |
| 6 | Timeout | Valid number (10-3600) |
| 7 | Validation | Must pass validation |
Button Reference
| Button | Where | Action |
|---|---|---|
| Cancel | Step 1 | Close without saving |
| Previous | Steps 2-7 | Go back one step |
| Save | All steps | Save current step |
| Next | Steps 1-6 | Save and proceed |
| Done | Step 7 | Close wizard |
| Validate JSON | Step 7 | Check for errors |
| Improve with AI | Step 7 | Get AI suggestions |
Next Steps
- Quick Start Guide — Step-by-step tutorials
- Concepts Guide — Understanding planning concepts
- User Guide — Complete reference
Support
- Click the ? icon in any step for context help
- Use the AI Advisor panel for suggestions
- Email: support@planningpowertools.com