feat(lang): complete extends to modifies keyword migration
This commit completes the migration started in the previous commit, updating all remaining files: - Lexer: Changed token from Extends to Modifies - Parser: Updated lalrpop grammar rules and AST field names - AST: Renamed Schedule.extends field to modifies - Grammar: Updated tree-sitter grammar.js - Tree-sitter: Regenerated parser.c and node-types.json - Examples: Updated baker-family work schedules - Tests: Updated schedule composition tests and corpus - Docs: Updated all reference documentation and tutorials - Validation: Updated error messages and validation logic - Package: Bumped version to 0.3.1 in all package manifests All 554 tests pass.
This commit is contained in:
@@ -16,15 +16,15 @@ Schedule: BakerySchedule
|
||||
├─ Block: 06:00 - 08:00 → prepare_dough
|
||||
├─ Block: 08:00 - 14:00 → serve_customers
|
||||
├─ Recurrence: Market Day (on Earthday) → special_market_hours
|
||||
└─ Extends: BaseBusiness (inherits closing hours)
|
||||
└─ Modifies: BaseBusiness (inherits closing hours)
|
||||
```
|
||||
|
||||
## Syntax
|
||||
|
||||
```bnf
|
||||
<schedule-decl> ::= "schedule" <identifier> <extends-clause>? <body>
|
||||
<schedule-decl> ::= "schedule" <identifier> <modifies-clause>? <body>
|
||||
|
||||
<extends-clause> ::= "extends" <identifier>
|
||||
<modifies-clause> ::= "modifies" <identifier>
|
||||
|
||||
<body> ::= "{" <schedule-item>* "}"
|
||||
|
||||
@@ -79,7 +79,7 @@ schedule BakeryBase {
|
||||
}
|
||||
}
|
||||
|
||||
schedule EarlyBaker extends BakeryBase {
|
||||
schedule EarlyBaker modifies BakeryBase {
|
||||
block work { // Override by name
|
||||
05:00 - 13:00
|
||||
action: baking::early_shift
|
||||
@@ -369,9 +369,9 @@ schedule FarmSchedule {
|
||||
|
||||
## Schedule Composition
|
||||
|
||||
Schedules can extend other schedules using `extends`, inheriting and overriding blocks.
|
||||
Schedules can extend other schedules using `modifies`, inheriting and overriding blocks.
|
||||
|
||||
### Extends Clause
|
||||
### Modifies Clause
|
||||
|
||||
```storybook
|
||||
schedule Base {
|
||||
@@ -381,7 +381,7 @@ schedule Base {
|
||||
}
|
||||
}
|
||||
|
||||
schedule Extended extends Base {
|
||||
schedule Extended modifies Base {
|
||||
block work { // Override inherited block
|
||||
05:00 - 13:00
|
||||
action: work::early_shift
|
||||
@@ -409,14 +409,14 @@ schedule BaseWork {
|
||||
}
|
||||
}
|
||||
|
||||
schedule BakerWork extends BaseWork {
|
||||
schedule BakerWork modifies BaseWork {
|
||||
block work {
|
||||
05:00 - 13:00 // Earlier hours
|
||||
action: baking::work
|
||||
}
|
||||
}
|
||||
|
||||
schedule MasterBaker extends BakerWork {
|
||||
schedule MasterBaker modifies BakerWork {
|
||||
block work {
|
||||
03:00 - 11:00 // Even earlier!
|
||||
action: baking::master_work
|
||||
@@ -553,7 +553,7 @@ schedule BaseShopkeeper {
|
||||
}
|
||||
}
|
||||
|
||||
schedule BlacksmithSchedule extends BaseShopkeeper {
|
||||
schedule BlacksmithSchedule modifies BaseShopkeeper {
|
||||
block open { // Override
|
||||
06:00 - 18:00 // Longer hours
|
||||
action: smithing::work
|
||||
@@ -686,8 +686,8 @@ On Wednesday at 11:00, `specialized` block is selected (more specific constraint
|
||||
|
||||
1. **Time format**: Times must be valid HH:MM or HH:MM:SS (24-hour)
|
||||
2. **Time order**: Start time must be before end time (unless spanning midnight)
|
||||
3. **Extends exists**: If using `extends`, base schedule must be defined
|
||||
4. **No circular extends**: Cannot form circular dependency chains
|
||||
3. **Modifies exists**: If using `modifies`, base schedule must be defined
|
||||
4. **No circular modifies**: Cannot form circular dependency chains
|
||||
5. **Named blocks unique**: Block names must be unique within a schedule
|
||||
6. **Action exists**: Action references must resolve to defined behaviors
|
||||
7. **Constraint values**: Temporal constraint values must reference defined enums
|
||||
@@ -699,14 +699,14 @@ On Wednesday at 11:00, `specialized` block is selected (more specific constraint
|
||||
|
||||
**Avoid:**
|
||||
```storybook
|
||||
schedule Extended extends Base {
|
||||
schedule Extended modifies Base {
|
||||
block { 05:00 - 13:00, action: work } // Appends instead of overriding
|
||||
}
|
||||
```
|
||||
|
||||
**Prefer:**
|
||||
```storybook
|
||||
schedule Extended extends Base {
|
||||
schedule Extended modifies Base {
|
||||
block work { 05:00 - 13:00, action: early_work } // Overrides by name
|
||||
}
|
||||
```
|
||||
@@ -746,8 +746,8 @@ recurs MarketDay on day saturday {
|
||||
**Prefer:**
|
||||
```storybook
|
||||
schedule WorkerBase { ... }
|
||||
schedule EarlyWorker extends WorkerBase { ... }
|
||||
schedule NightWorker extends WorkerBase { ... }
|
||||
schedule EarlyWorker modifies WorkerBase { ... }
|
||||
schedule NightWorker modifies WorkerBase { ... }
|
||||
```
|
||||
|
||||
### 5. Use Temporal Constraints for Clarity
|
||||
@@ -770,7 +770,7 @@ block summer_hours {
|
||||
## Related Concepts
|
||||
|
||||
- **Time-based AI**: Schedules drive time-dependent behavior
|
||||
- **Template inheritance**: `extends` enables schedule reuse
|
||||
- **Template inheritance**: `modifies` enables schedule reuse
|
||||
- **Temporal constraints**: Filter blocks by season, day, month
|
||||
- **Recurrence patterns**: Define repeating events
|
||||
- **Composition**: Build complex schedules from simple parts
|
||||
|
||||
@@ -163,8 +163,8 @@ life_arc HasOrphan {
|
||||
| Rule | Description | Severity |
|
||||
|------|-------------|----------|
|
||||
| Time format | Times must be valid HH:MM or HH:MM:SS | Error |
|
||||
| Extends exists | Base schedule must be defined | Error |
|
||||
| No circular extends | Schedule chains cannot form cycles | Error |
|
||||
| Modifies exists | Base schedule must be defined | Error |
|
||||
| No circular modifies | Schedule chains cannot form cycles | Error |
|
||||
| Named blocks unique | Block names must be unique within a schedule | Error |
|
||||
| Action references valid | Action references must resolve to defined behaviors | Error |
|
||||
| Constraint values valid | Temporal constraint values must reference defined enums | Error |
|
||||
@@ -182,10 +182,10 @@ schedule Bad {
|
||||
}
|
||||
```
|
||||
|
||||
**Circular extends:**
|
||||
**Circular modifies:**
|
||||
```storybook
|
||||
schedule A extends B { }
|
||||
schedule B extends A { } // Error: circular schedule extension detected
|
||||
schedule A modifies B { }
|
||||
schedule B modifies A { } // Error: circular schedule extension detected
|
||||
```
|
||||
|
||||
## Relationship Validation
|
||||
@@ -359,7 +359,7 @@ character Good {
|
||||
| Template | Unique name, valid includes, valid ranges, strict enforcement |
|
||||
| Behavior | Non-empty, valid composites, valid decorators, valid subtrees |
|
||||
| Life Arc | Non-empty, unique states, valid transitions, reachable states |
|
||||
| Schedule | Valid times, valid extends chain, unique block names |
|
||||
| Schedule | Valid times, valid modifies chain, unique block names |
|
||||
| Relationship | >= 2 participants, valid references |
|
||||
| Species | Unique name, valid includes, no cycles |
|
||||
| Enum | Unique name, unique variants, non-empty |
|
||||
|
||||
Reference in New Issue
Block a user