Define public .frog DSL surface for built-in primitives #2

Closed
opened 2026-06-01 13:43:26 +02:00 by yorunikakeru · 0 comments
Owner

Parent: #1

Goal

Define the user-facing FrogOS eDSL without exposing internal IR constructors or package implementation details.

Required surface

  • Areas: profile, service, and future area builders.
  • Composition: when, boolean condition operators, and via.
  • Built-in conditions, policies, actions, observation strategies, targets, and fallback strategies.
  • Domain-oriented smart constructors such as processRunning, disable, setPowerProfile, allowPorts, and fallback.
  • Small domain modules that users import explicitly.

Import policy

  • .frog files use ordinary explicit Haskell imports.
  • Users import only required DSL modules and functions.
  • The compiler does not inject a hidden prelude or automatic imports.
  • Multi-file configuration uses ordinary Haskell modules; a separate DSL import system is outside v1.

Constraints

  • Users may define names and compose built-in nodes.
  • Users may not define new primitive Condition, Policy, or Action nodes in v1.
  • Public API must not expose constructors that bypass structural guarantees.
  • Adding a primitive requires coordinated DSL, validator, IR schema, and FrogOS engine support.

Implementation issues

  • #12 Implement configuration builders for profiles and services
  • #13 Implement condition composition and observation strategies
  • #9 Implement initial service, power, and network primitives

Acceptance criteria

  • README profile and service examples type-check using explicit imports.
  • Structurally invalid compositions fail at Haskell compile time.
  • Public names map unambiguously to domain IR nodes.
  • No DSL function becomes available unless its module or symbol is explicitly imported.
Parent: #1 ## Goal Define the user-facing FrogOS eDSL without exposing internal IR constructors or package implementation details. ## Required surface - Areas: `profile`, `service`, and future area builders. - Composition: `when`, boolean condition operators, and `via`. - Built-in conditions, policies, actions, observation strategies, targets, and fallback strategies. - Domain-oriented smart constructors such as `processRunning`, `disable`, `setPowerProfile`, `allowPorts`, and `fallback`. - Small domain modules that users import explicitly. ## Import policy - `.frog` files use ordinary explicit Haskell imports. - Users import only required DSL modules and functions. - The compiler does not inject a hidden prelude or automatic imports. - Multi-file configuration uses ordinary Haskell modules; a separate DSL import system is outside v1. ## Constraints - Users may define names and compose built-in nodes. - Users may not define new primitive `Condition`, `Policy`, or `Action` nodes in v1. - Public API must not expose constructors that bypass structural guarantees. - Adding a primitive requires coordinated DSL, validator, IR schema, and FrogOS engine support. ## Implementation issues - [ ] #12 Implement configuration builders for profiles and services - [ ] #13 Implement condition composition and observation strategies - [ ] #9 Implement initial service, power, and network primitives ## Acceptance criteria - README profile and service examples type-check using explicit imports. - Structurally invalid compositions fail at Haskell compile time. - Public names map unambiguously to domain IR nodes. - No DSL function becomes available unless its module or symbol is explicitly imported.
yorunikakeru changed title from Design .frog user-facing DSL surface to Define public .frog DSL surface for built-in primitives 2026-06-06 14:02:07 +02:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
FrogOS/DSL#2
No description provided.