Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Complete example

This fixture exercises the current OSL parser with condition vocabularies, entities, a transport mutation, removals, and a delivery task. The documentation test runs the same file through osmiron-dsl check.

condition readiness [
    not_ready
    ready
]

condition cleanliness [
    clean
    dirty
    contaminated
    drop old
]

drop entity "van-111"

entity "van-110" {
    description {
        drop type
        name = "White VW van"
        plate = "ABC-123"
    }

    capacities {
        drop legacy_payload_mass
        payload_mass = 800 kg
        fuel_volume = 60 l
    }

    properties {
        drop legacy_fuel_volume
        payload_mass = 0 kg
        curb_mass = 1800 kg
        fuel_volume = 50 l
        fuel_per_distance = 0.08 l/km
        speed = 70 km/h
        located_at = @"hq".properties.located_at
    }

    traits [
        drop petrol
        vehicle
        van
        diesel
    ]

    conditions {
        drop legacy_readiness
        readiness = ready
        cleanliness = clean
    }

}

entity "cargo-42" {
    properties {
        mass = 120 kg
        located_at = @"hq".properties.located_at
    }

    traits [
        cargo
    ]

}

entity "hq" {
    traits [
        location
    ]

    properties {
        located_at = location(59.3293, 18.0686)
    }
}

drop entity "hq"

entity "workshop" {
    traits [
        location
    ]

    properties {
        located_at = location(59.3498, 18.0707)
    }
}


drop mutation "transport-payload"

mutation "transport-payload" {
    roles [
        drop driver
        van
        payload
        destination
    ]

    requires {
        drop @van.traits.petrol
        @van.traits.vehicle
        @van.conditions.readiness = ready
        @payload.traits.cargo
        @destination.traits.location
        @van.properties.located_at = @payload.properties.located_at
        @destination.properties.located_at
        @van.capacities.payload_mass
        @payload.properties.mass
        @van.properties.fuel_volume
        @van.properties.fuel_per_distance
    }

    uses {
        observe [
            drop @destination.properties.legacy_location
            @destination.properties.located_at
        ]

        share [
            drop @van.properties.legacy_location
        ]

        reserve [
            drop @driver
            @van
            @payload
        ]

        occupy {
            drop @van.capacities.payload_mass = @payload.properties.mass
            @van.capacities.payload_mass = @payload.properties.mass
        }
    }

    transforms {
        drop @van.properties.legacy_fuel_volume = 0 l
        @van.properties.fuel_volume = @van.properties.fuel_volume
            - @van.$distance * @van.properties.fuel_per_distance

        @van.properties.located_at = @destination.properties.located_at
        @payload.properties.located_at = @destination.properties.located_at
    }
}

task "deliver-cargo-42" {
    desired {
        drop @"cargo-42".properties.located_at = @"hq".properties.located_at
        @"cargo-42".properties.located_at = @"workshop".properties.located_at
    }
}

The fixture demonstrates accepted syntax, not end-to-end model semantics. Current change generation emits partial entity changes and top-level delete changes. It does not emit condition, mutation, or task declaration changes, and the command does not apply a model or produce a plan.