Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
136 commits
Select commit Hold shift + click to select a range
a35d9b8
refactor: migrate all quickstarts from timefold to blackops (legacy)
blackopsrepl Aug 30, 2025
762c36b
fix(vehicle-routing-fast): resolve validation error and add missing j…
blackopsrepl Aug 30, 2025
437039a
fix(meeting-scheduling): fix misc javascript issues
blackopsrepl Aug 30, 2025
ff4f818
fix(employee-scheduling): fix misc javascript issues
blackopsrepl Aug 30, 2025
37d88c6
chore: update imports and update docs
blackopsrepl Oct 27, 2025
5b269c2
fix(employee-scheduling-fast): correct date overlap calculation and r…
blackopsrepl Dec 5, 2025
e4fb940
Merge branch 'quickstart-guides'
blackopsrepl Dec 5, 2025
55d1cfe
feat(employee-scheduling-fast): add Docker support and SolverForge br…
blackopsrepl Dec 6, 2025
b6afc3e
feat: add max_shifts_per_employee constrainthttps://solverforge.org/d…
blackopsrepl Dec 6, 2025
7ab4458
feat(employee-scheduling): add score analysis API and refine constraints
blackopsrepl Dec 9, 2025
ec27e08
feat(employee-scheduling): add score analysis and loading spinner
blackopsrepl Dec 9, 2025
21ee06d
feat(vehicle-routing-fast): add Docker, score analysis, and SolverFor…
blackopsrepl Dec 9, 2025
11dacb5
feat(vehicle-routing): add timeline visualizations with status indica…
blackopsrepl Dec 9, 2025
719b2e3
feat(vehicle-routing): add max_route_duration constraint (disabled by…
blackopsrepl Dec 9, 2025
63cf9a5
Merge branch 'quickstart-guides'
blackopsrepl Dec 9, 2025
a19f7d2
refactor(vehicle-routing): remove unused pre-computed distance matrix
blackopsrepl Dec 9, 2025
2f492d7
feat(portfolio-optimization): add portfolio optimization quickstart
blackopsrepl Dec 10, 2025
6a68c2e
Merge branch 'portfolio-management'
blackopsrepl Dec 11, 2025
3bfc8eb
fix(portfolio-optimization): correct comparison script and update mes…
blackopsrepl Dec 11, 2025
b02db58
feat(vehicle-routing): add real road routing with OSMnx
blackopsrepl Dec 11, 2025
35819b4
feat(vm-placement): add VM placement quickstart with rack visualization
blackopsrepl Dec 11, 2025
de8e61c
feat(vm-placement): add advanced settings and fix domain model
blackopsrepl Dec 11, 2025
5ef9c1d
Merge branch 'vm-placement'
blackopsrepl Dec 11, 2025
e2a7ac9
deploy(vm-placement): add dockerfile
blackopsrepl Dec 11, 2025
f6dff88
Merge branch 'vm-placement'
blackopsrepl Dec 11, 2025
e9df7d4
Create FUNDING.yml
blackopsrepl Dec 17, 2025
f2479fc
Create FUNDING.yml
blackopsrepl Dec 17, 2025
f588de6
Merge pull request #1 from SolverForge/feature/funding
blackopsrepl Dec 17, 2025
4ff4db6
Merge remote-tracking branch 'SolverForge/feature/funding' into dev
blackopsrepl Dec 17, 2025
5e8fce2
Merge remote-tracking branch 'SolverForge/feature/funding' into dev
blackopsrepl Dec 17, 2025
9597953
feat: remove legacy Timefold quickstarts
blackopsrepl Dec 18, 2025
91d734a
feat: remove legacy Timefold quickstarts
blackopsrepl Dec 18, 2025
50bb7f1
feat: add maintenance scheduling quickstart
blackopsrepl Dec 19, 2025
2f440b5
feat: add maintenance scheduling quickstart
blackopsrepl Dec 19, 2025
af2a861
Merge branch 'dev'
blackopsrepl Dec 22, 2025
481419b
feat: upgrade meeting-scheduling
blackopsrepl Dec 22, 2025
92291eb
feat: upgrade meeting-scheduling
blackopsrepl Dec 22, 2025
7e82e97
feat(meeting-scheduling): add score analysis, room stability, and Sol…
blackopsrepl Dec 9, 2025
5960401
feat(meeting-scheduling): add score analysis, room stability, and Sol…
blackopsrepl Dec 9, 2025
5aafcd7
fix(meeting-scheduling): use solver constraint analysis for accurate …
blackopsrepl Dec 10, 2025
07fdc94
fix(meeting-scheduling): use solver constraint analysis for accurate …
blackopsrepl Dec 10, 2025
b6862f2
fix(meeting-scheduling): add missing filters to attendance conflict c…
blackopsrepl Dec 10, 2025
e45be76
fix(meeting-scheduling): add missing filters to attendance conflict c…
blackopsrepl Dec 10, 2025
7c6b081
refactor(meeting-scheduling): remove unused analyzeConflicts function
blackopsrepl Dec 10, 2025
7817a5c
refactor(meeting-scheduling): remove unused analyzeConflicts function
blackopsrepl Dec 10, 2025
2caa3fa
fix(meeting-scheduling): show red for attendance conflicts in timeline
blackopsrepl Dec 10, 2025
f8ca3b8
fix(meeting-scheduling): show red for attendance conflicts in timeline
blackopsrepl Dec 10, 2025
c76cd3a
fix(meeting-scheduling): fix attendance fact to assignment mapping in…
blackopsrepl Dec 10, 2025
b6610e0
fix(meeting-scheduling): fix attendance fact to assignment mapping in…
blackopsrepl Dec 10, 2025
9d9c80f
Merge branch 'meeting-scheduling-broken' into dev
blackopsrepl Dec 22, 2025
2fdaad5
Merge branch 'meeting-scheduling-broken' into dev
blackopsrepl Dec 22, 2025
7933ddc
Merge branch 'dev'
blackopsrepl Dec 22, 2025
dc95b9f
feat: add order picking quickstart
blackopsrepl Dec 23, 2025
432036a
feat: add order picking quickstart
blackopsrepl Dec 23, 2025
518c4ce
feat(order-picking): isometric 3D warehouse visualization with improv…
blackopsrepl Dec 23, 2025
535e8b8
feat(order-picking): isometric 3D warehouse visualization with improv…
blackopsrepl Dec 23, 2025
bebce4d
fix(order-picking): fix score modal stacking by reusing instance
blackopsrepl Dec 23, 2025
b1c52c9
fix(order-picking): fix score modal stacking by reusing instance
blackopsrepl Dec 23, 2025
0ed86b8
fix(order-picking): run score analysis in thread pool, add loading in…
blackopsrepl Dec 23, 2025
0eedf15
fix(order-picking): run score analysis in thread pool, add loading in…
blackopsrepl Dec 23, 2025
1a5c35a
Merge branch 'feature/order-picking' into dev
blackopsrepl Dec 23, 2025
e9476bb
Merge branch 'feature/order-picking' into dev
blackopsrepl Dec 23, 2025
d427ae3
Merge branch 'feature/order-picking'
blackopsrepl Dec 23, 2025
dba3c40
chore: move `fast` quickstarts to legacy
blackopsrepl Dec 23, 2025
55fca32
chore: move `fast` quickstarts to legacy
blackopsrepl Dec 23, 2025
cbfd615
chore: clean up and update README.md
blackopsrepl Jan 2, 2026
98e7a9a
chore: clean up and update README.md
blackopsrepl Jan 2, 2026
4c0669f
feat(rust): import employee-scheduling and vehicle-routing quickstarts
blackopsrepl Jan 5, 2026
e6ec535
feat(rust): import employee-scheduling and vehicle-routing quickstarts
blackopsrepl Jan 5, 2026
ee3e1c9
Merge branch 'dev'
blackopsrepl Jan 5, 2026
7398a9a
perf(vehicle-routing): remove RwLock overhead, add 2-opt moves
blackopsrepl Jan 7, 2026
1fd7c28
perf(vehicle-routing): remove RwLock overhead, add 2-opt moves
blackopsrepl Jan 7, 2026
e2c8c74
feat(vehicle-routing): add #[planning_list_variable] to Vehicle.visits
blackopsrepl Jan 7, 2026
7098a03
refactor(vehicle-routing): change Visit from problem_fact to planning…
blackopsrepl Jan 7, 2026
01891fa
feat(vehicle-routing): add vehicle_idx shadow variable to Visit
blackopsrepl Jan 7, 2026
149ac91
feat(vehicle-routing): add previous_visit_idx shadow variable to Visit
blackopsrepl Jan 7, 2026
f05c5da
feat(vehicle-routing): add arrival_time cascading shadow variable
blackopsrepl Jan 7, 2026
54f9cdc
feat(vehicle-routing): add is_late() and late_minutes() to Visit
blackopsrepl Jan 7, 2026
7df81e8
feat(vehicle-routing): add cached aggregates to Vehicle
blackopsrepl Jan 7, 2026
3b05ea9
feat(vehicle-routing): add update_shadows() to VehicleRoutePlan
blackopsrepl Jan 7, 2026
1c52d2b
feat(vehicle-routing): add fluent constraint API with shadow variables
blackopsrepl Jan 7, 2026
038a0e5
refactor(vehicle-routing): remove legacy score calculator functions
blackopsrepl Jan 7, 2026
738f071
feat(vehicle-routing): use shadow variables in score calculation
blackopsrepl Jan 7, 2026
a7ddbf0
feat(vehicle-routing): add typed list operations and ShadowVariableSu…
blackopsrepl Jan 7, 2026
d8fcc5d
feat(vehicle-routing): add VrpDistanceMeter for nearby k-opt selection
blackopsrepl Jan 7, 2026
38c3234
refactor(vehicle-routing): use LocalSearchPhase for solver
blackopsrepl Jan 7, 2026
6a64487
feat(routing): add progress callbacks to matrix and geometry computation
blackopsrepl Jan 8, 2026
4a1f13e
feat(api): emit granular SSE progress for matrix and geometry phases
blackopsrepl Jan 8, 2026
9d9c9ca
feat(ui): add phase icons for matrix, geometry, and fallback progress
blackopsrepl Jan 8, 2026
b679869
feat(vehicle-routing): add shadow_variable_updates attribute and cach…
blackopsrepl Jan 8, 2026
26078bd
feat(vehicle-routing): use TypedScoreDirector for SERIO incremental s…
blackopsrepl Jan 8, 2026
d9072ea
fix(vehicle-routing): initialize SERIO score director before local se…
blackopsrepl Jan 8, 2026
4cc0a6d
feat(vehicle-routing): use KOptPhaseBuilder fluent API
blackopsrepl Jan 9, 2026
9c7e6de
delete(domain): remove legacy create_solution_descriptor()
blackopsrepl Jan 9, 2026
a33e9ac
fix(solver): use macro-generated VehicleRoutePlan::descriptor()
blackopsrepl Jan 9, 2026
3588605
fix(solver): use entity index 1 for vehicles in solve_blocking()
blackopsrepl Jan 9, 2026
4325765
fix(solver): use entity index 1 for vehicles in test
blackopsrepl Jan 9, 2026
8706227
deploy: add Helm charts and CI/CD workflow for legacy apps
blackopsrepl Jan 9, 2026
f691ff9
feat(api): emit granular SSE progress for matrix and geometry phases
blackopsrepl Jan 8, 2026
08d6fba
feat(routing): add progress callbacks to matrix and geometry computation
blackopsrepl Jan 8, 2026
5c92484
chore: bump vehicle routing version
blackopsrepl Jan 9, 2026
37aa83b
Merge branch 'release/pre-release'
blackopsrepl Jan 9, 2026
a9d8452
feat(solver): use solution.solve() with zero parameters
blackopsrepl Jan 9, 2026
95e6b9c
docs: fix outdated comment about SolverBuilder
blackopsrepl Jan 9, 2026
54c89f4
feat(vehicle-routing): add solver.toml configuration
blackopsrepl Jan 9, 2026
ce9f883
refactor(vehicle-routing): delete all manual wiring helpers
blackopsrepl Jan 9, 2026
bf219e1
feat(domain): add minimal shadow variable listeners
blackopsrepl Jan 9, 2026
410802d
deps(vehicle-routing): use solverforge-maps for routing utilities
blackopsrepl Jan 9, 2026
beb9d4f
refactor(vehicle-routing): use config-driven termination
blackopsrepl Jan 9, 2026
594c9b4
refactor(employee-scheduling): remove dead code from solver.rs
blackopsrepl Jan 10, 2026
514e0c9
fix(employee-scheduling): remove unnecessary clone on Copy type
blackopsrepl Jan 10, 2026
e200f97
refactor(employee-scheduling): remove unused builder and helper methods
blackopsrepl Jan 10, 2026
8a1d02b
feat(employee-scheduling): use solve_with_events for real-time consol…
blackopsrepl Jan 10, 2026
3fdfd7e
refactor(employee-scheduling): use SolutionManager public API
blackopsrepl Jan 11, 2026
59f4dd4
feat(vehicle-routing): add SolutionManager API and console output
blackopsrepl Jan 11, 2026
94d5e0d
refactor(employee-scheduling): use split SolverManager/SolutionManage…
blackopsrepl Jan 11, 2026
c08b895
Merge branch 'release/pre-release' into release/0.5.0
blackopsrepl Jan 11, 2026
2bd7f7e
refactor(employee-scheduling): use channel-based SolverManager API
blackopsrepl Jan 11, 2026
3cd5865
refactor(employee-scheduling): delete manual console wiring
blackopsrepl Jan 11, 2026
748e89b
refactor: remove manual console wiring from quickstarts
blackopsrepl Jan 11, 2026
4b23e2d
fix(employee-scheduling): update test to use channel-based Solvable API
blackopsrepl Jan 11, 2026
72ed256
chore: delete vehicle-routing
blackopsrepl Jan 9, 2026
8c52881
feat(employee-scheduling): add solver status tracking and verbose log…
blackopsrepl Jan 15, 2026
053f5ba
Merge branch 'dev' into release/0.5.0
blackopsrepl Jan 15, 2026
4e40b36
docs: update README with all legacy quickstarts and improve organization
blackopsrepl Jan 15, 2026
48adde6
fix(legacy): fix failing tests in meeting-scheduling and order-pickin…
blackopsrepl Jan 15, 2026
4eafab3
feat(rust): add Helm chart and CI pipeline for employee-scheduling
blackopsrepl Jan 15, 2026
679a685
fix(legacy): adapt constraint tests to work with Attendance objects
blackopsrepl Jan 15, 2026
6aa0eb7
ci: run tests on release/* branches
blackopsrepl Jan 15, 2026
e65e1a4
fix(rust): handle empty schedule in test_empty_schedule_has_score
blackopsrepl Jan 15, 2026
1d28bcf
fix(docker): rewrite Dockerfile for standalone build with Alpine
blackopsrepl Jan 15, 2026
bc176c5
Merge branch 'release/0.5.0'
blackopsrepl Jan 15, 2026
dae7f8d
Uprade to solverforge 0.5.1
prathje Jan 19, 2026
97263e1
implement missing showError and pick color functions
prathje Jan 19, 2026
c708b10
pan map to show newly added vehicles
prathje Jan 19, 2026
899bc3c
fix id and demand conversion for api requests
prathje Jan 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# These are supported funding model platforms

github: [blackopsrepl]
172 changes: 172 additions & 0 deletions .github/workflows/docker-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
name: CI/CD Pipeline

on:
push:
branches:
- main
- dev
- 'release/**'
paths:
- 'rust/employee-scheduling/**'
- 'legacy/employee-scheduling-fast/**'
- 'legacy/maintenance-scheduling-fast/**'
- 'legacy/meeting-scheduling-fast/**'
- 'legacy/order-picking-fast/**'
- 'legacy/vehicle-routing-fast/**'
- 'legacy/vm-placement-fast/**'
- '.github/workflows/docker-publish.yml'
workflow_dispatch:
inputs:
apps:
description: 'Apps to build (comma-separated, or "all")'
required: false
default: 'all'

env:
REGISTRY: ghcr.io

jobs:
# Rust tests
test-rust:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Rust
uses: dtolnay/rust-toolchain@stable

- name: Cache Rust dependencies
uses: Swatinem/rust-cache@v2
with:
workspaces: rust/employee-scheduling

- name: Run tests
working-directory: rust/employee-scheduling
run: cargo test --verbose

- name: Build
working-directory: rust/employee-scheduling
run: cargo build --release --verbose

# Python legacy tests
test-python:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
app:
- name: employee-scheduling-fast
path: legacy/employee-scheduling-fast
- name: maintenance-scheduling-fast
path: legacy/maintenance-scheduling-fast
- name: meeting-scheduling-fast
path: legacy/meeting-scheduling-fast
- name: order-picking-fast
path: legacy/order-picking-fast
- name: vehicle-routing-fast
path: legacy/vehicle-routing-fast
- name: vm-placement-fast
path: legacy/vm-placement-fast
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'

- name: Install dependencies
working-directory: ${{ matrix.app.path }}
run: |
python -m pip install --upgrade pip
pip install -e .
pip install pytest

- name: Run tests
working-directory: ${{ matrix.app.path }}
run: pytest -v

# Build and push on main and dev
build-and-push:
needs: [test-rust, test-python]
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
strategy:
fail-fast: false
matrix:
app:
- name: employee-scheduling
context: rust/employee-scheduling
- name: employee-scheduling-fast
context: legacy/employee-scheduling-fast
- name: maintenance-scheduling-fast
context: legacy/maintenance-scheduling-fast
- name: meeting-scheduling-fast
context: legacy/meeting-scheduling-fast
- name: order-picking-fast
context: legacy/order-picking-fast
- name: vehicle-routing-fast
context: legacy/vehicle-routing-fast
- name: vm-placement-fast
context: legacy/vm-placement-fast
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Check if app should be built
id: check
run: |
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
apps="${{ github.event.inputs.apps }}"
if [[ "$apps" == "all" || "$apps" == *"${{ matrix.app.name }}"* ]]; then
echo "build=true" >> $GITHUB_OUTPUT
else
echo "build=false" >> $GITHUB_OUTPUT
fi
else
echo "build=true" >> $GITHUB_OUTPUT
fi

- name: Set up Docker Buildx
if: steps.check.outputs.build == 'true'
uses: docker/setup-buildx-action@v3

- name: Log in to Container Registry
if: steps.check.outputs.build == 'true'
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels)
if: steps.check.outputs.build == 'true'
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ matrix.app.name }}
tags: |
type=ref,event=branch
type=sha,prefix=
type=raw,value=latest

- name: Build and push Docker image
if: steps.check.outputs.build == 'true'
uses: docker/build-push-action@v5
with:
context: ${{ matrix.app.context }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,6 @@ __pycache__

# Repository wide ignore mac DS_Store files
.DS_Store
.osm_cache
*.code-workspace
CLAUDE.md
Loading