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:
2026-02-16 22:55:04 +00:00
parent 2c898347ee
commit 47fafdc2bf
109 changed files with 5045 additions and 41939 deletions

View File

@@ -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