interaqt 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/agent/.claude/agents/code-generation-handler.md +2 -0
  2. package/agent/.claude/agents/computation-generation-handler.md +2 -3
  3. package/agent/.claude/agents/implement-design-handler.md +4 -13
  4. package/agent/.claude/agents/requirements-analysis-handler.md +88 -16
  5. package/agent/agentspace/knowledge/generator/api-reference.md +3815 -0
  6. package/agent/agentspace/knowledge/generator/basic-interaction-generation.md +377 -0
  7. package/agent/agentspace/knowledge/generator/computation-analysis.md +309 -0
  8. package/agent/agentspace/knowledge/generator/computation-implementation.md +983 -0
  9. package/agent/agentspace/knowledge/generator/data-analysis.md +484 -0
  10. package/agent/agentspace/knowledge/generator/entity-relation-generation.md +395 -0
  11. package/agent/agentspace/knowledge/generator/permission-implementation.md +460 -0
  12. package/agent/agentspace/knowledge/generator/permission-test-implementation.md +870 -0
  13. package/agent/agentspace/knowledge/generator/test-implementation.md +674 -0
  14. package/agent/agentspace/knowledge/usage/00-mindset-shift.md +322 -0
  15. package/agent/agentspace/knowledge/usage/01-core-concepts.md +131 -0
  16. package/agent/agentspace/knowledge/usage/02-define-entities-properties.md +407 -0
  17. package/agent/agentspace/knowledge/usage/03-entity-relations.md +599 -0
  18. package/agent/agentspace/knowledge/usage/04-reactive-computations.md +2186 -0
  19. package/agent/agentspace/knowledge/usage/05-interactions.md +1411 -0
  20. package/agent/agentspace/knowledge/usage/06-attributive-permissions.md +10 -0
  21. package/agent/agentspace/knowledge/usage/07-payload-parameters.md +593 -0
  22. package/agent/agentspace/knowledge/usage/08-activities.md +863 -0
  23. package/agent/agentspace/knowledge/usage/09-filtered-entities.md +784 -0
  24. package/agent/agentspace/knowledge/usage/10-async-computations.md +734 -0
  25. package/agent/agentspace/knowledge/usage/11-global-dictionaries.md +942 -0
  26. package/agent/agentspace/knowledge/usage/12-data-querying.md +1033 -0
  27. package/agent/agentspace/knowledge/usage/13-testing.md +1201 -0
  28. package/agent/agentspace/knowledge/usage/14-api-reference.md +1606 -0
  29. package/agent/agentspace/knowledge/usage/15-entity-crud-patterns.md +1122 -0
  30. package/agent/agentspace/knowledge/usage/16-frontend-page-design-guide.md +485 -0
  31. package/agent/agentspace/knowledge/usage/17-performance-optimization.md +283 -0
  32. package/agent/agentspace/knowledge/usage/18-api-exports-reference.md +176 -0
  33. package/agent/agentspace/knowledge/usage/19-common-anti-patterns.md +563 -0
  34. package/agent/agentspace/knowledge/usage/README.md +148 -0
  35. package/dist/index.js +2977 -2976
  36. package/dist/index.js.map +1 -1
  37. package/dist/runtime/ComputationSourceMap.d.ts +11 -21
  38. package/dist/runtime/ComputationSourceMap.d.ts.map +1 -1
  39. package/dist/runtime/Controller.d.ts +2 -2
  40. package/dist/runtime/MonoSystem.d.ts.map +1 -1
  41. package/dist/runtime/Scheduler.d.ts +6 -6
  42. package/dist/runtime/Scheduler.d.ts.map +1 -1
  43. package/dist/runtime/System.d.ts +5 -0
  44. package/dist/runtime/System.d.ts.map +1 -1
  45. package/dist/runtime/computations/Computation.d.ts +4 -9
  46. package/dist/runtime/computations/Computation.d.ts.map +1 -1
  47. package/dist/runtime/computations/StateMachine.d.ts +4 -7
  48. package/dist/runtime/computations/StateMachine.d.ts.map +1 -1
  49. package/dist/runtime/computations/Transform.d.ts +7 -1
  50. package/dist/runtime/computations/Transform.d.ts.map +1 -1
  51. package/dist/runtime/computations/TransitionFinder.d.ts +2 -2
  52. package/dist/runtime/computations/TransitionFinder.d.ts.map +1 -1
  53. package/dist/shared/StateTransfer.d.ts +15 -5
  54. package/dist/shared/StateTransfer.d.ts.map +1 -1
  55. package/dist/shared/Transform.d.ts +17 -3
  56. package/dist/shared/Transform.d.ts.map +1 -1
  57. package/package.json +1 -1
  58. package/agent/.claude/agents/requirements-analysis-handler-bak.md +0 -530
@@ -0,0 +1,484 @@
1
+ # Data Analysis Guide for interaqt Projects (v2)
2
+
3
+ ## Overview
4
+
5
+ This guide explains how to analyze data requirements using the new requirement artifacts (`requirements/data-concepts.json` and `requirements/interactions-design.json`) to produce a comprehensive data design for interaqt implementations. The analysis leverages pre-extracted data concepts and interaction specifications to determine entity lifecycles, property dependencies, and computation methods.
6
+
7
+ ## Important Note on Interaction References
8
+
9
+ **CRITICAL**: Throughout this analysis process, always use **interaction names** (not interaction IDs) when referencing interactions.
10
+
11
+ - ✅ Correct: `"creationInteractions": ["CreateUser", "AssignUserToBed"]`
12
+ - ❌ Incorrect: `"creationInteractions": ["I101", "I102"]`
13
+
14
+ This applies to all interaction-related fields including:
15
+ - `creationInteractions`
16
+ - `deletionInteractions`
17
+ - `interactionDependencies`
18
+ - Any other references to interactions in the analysis output
19
+
20
+ ## Input Artifacts
21
+
22
+ ### 1. requirements/data-concepts.json
23
+ Contains pre-extracted data concepts:
24
+ - **Entities**: Core business objects with their properties
25
+ - **Relations**: Connections between entities
26
+ - **Dictionaries**: Global data and system-wide configurations
27
+ - **Views**: Pre-defined data queries and filters
28
+
29
+ ### 2. requirements/interactions-design.json
30
+ Contains interaction specifications showing:
31
+ - **Data operations**: What each interaction creates, reads, updates, or deletes
32
+ - **Data constraints**: How data is modified or created
33
+ - **Validation rules**: Business rules and constraints
34
+
35
+ ## Analysis Process
36
+
37
+ ### Step 1: Import Core Data Concepts
38
+
39
+ #### 1.1 Import Entities from requirements/data-concepts.json
40
+
41
+ Read the entities directly from `requirements/data-concepts.json`. Each entity already includes:
42
+ - Name and description
43
+ - Properties with types and purposes
44
+ - Computed property indicators
45
+ - Reference information
46
+
47
+ **No extraction needed** - the entities are already identified and structured.
48
+
49
+ #### 1.2 Import Dictionaries
50
+
51
+ Read dictionaries from `requirements/data-concepts.json`. These represent:
52
+ - System-wide configurations
53
+ - Global statistics
54
+ - Shared validation rules
55
+ - Cross-entity aggregates
56
+
57
+ ### Step 2: Analyze Entity Lifecycles Using Interactions
58
+
59
+ For **EACH entity** in data-concepts.json:
60
+
61
+ #### 2.1 Determine Creation Pattern
62
+
63
+ Analyze `requirements/interactions-design.json` to identify how entities are created:
64
+
65
+ **Step A: Find Creation Interactions**
66
+ 1. Search all interactions where the entity appears in `data.creates`
67
+ 2. List these as `creationInteractions` (use interaction **names**, not IDs)
68
+
69
+ **Step B: Determine Creation Type**
70
+ Analyze the creation pattern:
71
+
72
+ - **interaction-created**: Entity is created independently by interactions
73
+ - Entity appears alone in `data.creates`
74
+ - Or is the primary entity being created
75
+
76
+ - **created-with-parent**: Entity is created as part of another entity's creation
77
+ - Multiple entities appear in same interaction's `data.creates`
78
+ - Check `dataConstraints` for phrases like "automatically create", "create for each"
79
+ - The parent is the primary entity, child entities are secondary
80
+
81
+ - **derived**: Entity is filtered/computed from other entities
82
+ - No interactions directly create it
83
+ - Views in data-concepts.json are typically derived
84
+
85
+ - **mutation-derived**: Entity is created from record mutation events
86
+ - Not directly in any interaction's `data.creates`
87
+ - Created by reactive computations (e.g., Transform) responding to other entities' creation/update/deletion
88
+ - Check for descriptions mentioning "when X is created/updated/deleted, create Y"
89
+ - Often used for audit logs, history tracking, or event-driven workflows
90
+
91
+ **Example Analysis**:
92
+ ```json
93
+ // In interaction "CreateDormitory":
94
+ "data": {
95
+ "creates": ["Dormitory", "Bed"]
96
+ },
97
+ "dataConstraints": [
98
+ "Automatically create individual bed entities for each bed"
99
+ ]
100
+ // Result: Dormitory is interaction-created, Bed is created-with-parent (parent: Dormitory)
101
+
102
+ // For mutation-derived entity (not in any interaction's creates):
103
+ // In data-concepts.json: "UserActivityLog: Records all user actions"
104
+ // In interactions: No interaction directly creates UserActivityLog
105
+ // In descriptions: "Activity logs are automatically created when users perform actions"
106
+ // Result: UserActivityLog is mutation-derived
107
+ ```
108
+
109
+ #### 2.2 Determine Deletion Pattern
110
+
111
+ Search interactions for deletion operations:
112
+ 1. Find interactions where entity appears in `data.deletes` (record interaction **names**, not IDs)
113
+ 2. Determine deletion type:
114
+ - **hard-delete**: Entity removed from storage
115
+ - **soft-delete**: Entity marked as deleted (status change)
116
+ - **auto-delete**: Deleted when parent/dependency is deleted
117
+
118
+ ### Step 3: Analyze Property Dependencies
119
+
120
+ For **EACH property** of every entity:
121
+
122
+ #### 3.1 Identify Data Dependencies
123
+
124
+ From data-concepts.json, check if property is marked as `computed`:
125
+ - If `computed: true`, examine the `computation` field
126
+ - List all entities/relations/properties mentioned in `computation.dependencies`
127
+ - These become the property's `dataDependencies`
128
+
129
+ **Important**: Consider if this property could be decomposed:
130
+ - Could parts of the computation be extracted as separate properties?
131
+ - Are there reusable metrics hidden in the computation?
132
+ - Would intermediate properties make the logic clearer?
133
+
134
+ #### 3.2 Identify Interaction Dependencies
135
+
136
+ Search interactions-design.json to find which interactions modify this property:
137
+ 1. Look for entity property in `data.updates` (e.g., "User.behaviorScore")
138
+ 2. Look for entity in `data.creates` (properties set at creation)
139
+ 3. List all matching interactions as `interactionDependencies` (use interaction **names**, not IDs)
140
+
141
+ #### 3.3 Determine Computation Method
142
+
143
+ Transform the computation description using semantic best practices:
144
+ - **Don't copy directly** from data-concepts.json
145
+ - Apply the "Best Practices for Computation Design" principles
146
+ - Use semantic computations (Count, Every, Any, Summation, etc.) where possible
147
+ - Decompose complex calculations into intermediate properties
148
+ - Make the computation intent clear and implementation-ready
149
+
150
+ #### 3.4 Determine Control Type
151
+
152
+ Based on the analysis:
153
+ - **creation-only**: Only set when entity is created (no updates found)
154
+ - **derived-with-parent**: Property of a derived entity
155
+ - **independent**: Has separate update logic (found in `data.updates`)
156
+
157
+ ### Step 4: Analyze Relations
158
+
159
+ #### 4.1 Import Relation Structure
160
+
161
+ Read relations from data-concepts.json:
162
+ - Source and target entities
163
+ - Cardinality
164
+ - Relation properties
165
+
166
+ #### 4.2 Determine Relation Lifecycle
167
+
168
+ Similar to entities, analyze how relations are created:
169
+
170
+ **Find Creation Interactions**:
171
+ 1. Search for relation name in `data.creates`
172
+ 2. Analyze creation context
173
+ 3. Record interaction **names**, not IDs
174
+
175
+ **Determine Creation Type**:
176
+ - **interaction-created**: Relation created independently
177
+ - **created-with-entity**: Created when source/target entity is created
178
+ - **derived**: Computed from data conditions
179
+ - **mutation-derived**: Created from record mutation events
180
+ - Not directly in any interaction's `data.creates`
181
+ - Created by reactive computations responding to entity/relation changes
182
+ - Common for maintaining referential integrity or creating audit trails
183
+
184
+ **Example**:
185
+ ```json
186
+ // UserBedAssignment appears in:
187
+ // "AssignUserToBed": "data": { "creates": ["UserBedAssignment"] }
188
+ // Result: interaction-created
189
+
190
+ // If it appeared with entity creation:
191
+ // "CreatePost": "data": { "creates": ["Post", "PostAuthorRelation"] }
192
+ // Result: PostAuthorRelation is created-with-entity (Post)
193
+
194
+ // For mutation-derived relation:
195
+ // UserFollowRelation not in any interaction's creates
196
+ // Description: "Automatically created when user likes multiple posts by same author"
197
+ // Result: UserFollowRelation is mutation-derived
198
+ ```
199
+
200
+ ### Step 5: Transform Dictionaries to Analysis Format
201
+
202
+ For each dictionary in data-concepts.json:
203
+
204
+ #### 5.1 Analyze Usage Patterns
205
+
206
+ Search interactions for dictionary usage:
207
+ 1. Find where dictionary appears in `data.reads` (record interaction **names**, not IDs)
208
+ 2. Find where dictionary values are used in conditions
209
+ 3. Determine if values are static or computed
210
+
211
+ #### 5.2 Determine Dependencies
212
+
213
+ - **Data Dependencies**: If dictionary aggregates from entities
214
+ - **Interaction Dependencies**: If interactions update dictionary values (use interaction **names**, not IDs)
215
+ - **Computation Method**: How the value is calculated or maintained
216
+
217
+ ## Best Practices for Computation Design
218
+
219
+ ### Prioritize Semantic Computations
220
+
221
+ To ensure data clarity, follow these principles:
222
+
223
+ 1. **Use System-Provided Semantic Computations First**
224
+ - Prefer built-in computations over custom implementations:
225
+ - `Count` - Count entities or relations
226
+ - `Every` - Check if all items meet a condition
227
+ - `Any` - Check if at least one item meets a condition
228
+ - `Summation` - Sum numeric values across relations
229
+ - `Average` - Calculate average of numeric values
230
+ - `WeightedSummation` - Calculate weighted sum with custom weights
231
+ - These provide better performance and clearer intent
232
+ - Examples:
233
+ - Use `Count` for counting relations instead of custom counter logic
234
+ - Use `Every` for "all items meet condition" instead of custom validation
235
+ - Use `Any` for "at least one item meets condition" instead of custom checks
236
+ - Use `Summation` for totaling values (e.g., order totals, scores)
237
+ - Use `Average` for calculating means (e.g., average rating, average price)
238
+ - Use `WeightedSummation` for weighted calculations (e.g., GPA, weighted scores)
239
+
240
+ 2. **Decompose Complex Calculations with Intermediate Data Concepts**
241
+ - When custom calculations are necessary, identify reusable parts
242
+ - Extract these parts as intermediate computed properties using semantic computations
243
+ - Reference intermediate properties in final custom calculations
244
+ - This approach:
245
+ - Reduces complexity of custom logic
246
+ - Improves reusability
247
+ - Makes data dependencies clearer
248
+ - Enables better optimization
249
+
250
+ ### Example: Order Fulfillment Status
251
+
252
+ Instead of a complex custom calculation:
253
+
254
+ ```json
255
+ // ❌ Complex custom calculation mixing multiple concerns
256
+ "fulfillmentStatus": {
257
+ "type": "string",
258
+ "purpose": "Overall order fulfillment status",
259
+ "dataDependencies": ["OrderItemRelation", "Item.status", "Item.shippedDate"],
260
+ "interactionDependencies": [],
261
+ "computationMethod": "Custom: Loop through all items, check each status, count shipped, check dates, determine overall status"
262
+ }
263
+ ```
264
+
265
+ Decompose into intermediate semantic computations:
266
+
267
+ ```json
268
+ // ✅ Better: Use intermediate properties with semantic computations
269
+ "properties": {
270
+ "totalItems": {
271
+ "type": "number",
272
+ "purpose": "Total number of items in order",
273
+ "dataDependencies": ["OrderItemRelation"],
274
+ "interactionDependencies": [],
275
+ "computationMethod": "Count of OrderItemRelation"
276
+ },
277
+ "shippedItems": {
278
+ "type": "number",
279
+ "purpose": "Number of shipped items",
280
+ "dataDependencies": ["OrderItemRelation", "Item.status"],
281
+ "interactionDependencies": [],
282
+ "computationMethod": "Count of OrderItemRelation where Item.status = 'shipped'"
283
+ },
284
+ "allItemsShipped": {
285
+ "type": "boolean",
286
+ "purpose": "Whether all items are shipped",
287
+ "dataDependencies": ["OrderItemRelation", "Item.status"],
288
+ "interactionDependencies": [],
289
+ "computationMethod": "Every(item => item.status === 'shipped')"
290
+ },
291
+ "fulfillmentStatus": {
292
+ "type": "string",
293
+ "purpose": "Overall order fulfillment status",
294
+ "dataDependencies": ["allItemsShipped", "shippedItems", "totalItems"],
295
+ "interactionDependencies": [],
296
+ "computationMethod": "Custom: if (allItemsShipped) return 'complete'; if (shippedItems > 0) return 'partial'; return 'pending'"
297
+ }
298
+ }
299
+ ```
300
+
301
+ ### Benefits of This Approach
302
+
303
+ 1. **Clarity**: Each property has a single, clear purpose
304
+ 2. **Reusability**: Intermediate properties can be used by multiple consumers
305
+ 3. **Performance**: System can optimize semantic computations
306
+ 4. **Maintainability**: Changes to business logic are localized
307
+ 5. **Testability**: Each computation can be validated independently
308
+
309
+ ### When to Create Intermediate Properties
310
+
311
+ Create intermediate computed properties when you find yourself:
312
+ - Counting or aggregating within custom logic
313
+ - Checking conditions across collections
314
+ - Repeatedly calculating the same sub-values
315
+ - Combining multiple data sources in complex ways
316
+
317
+ Remember: It's better to have several simple, semantic computations than one complex custom calculation.
318
+
319
+ ## Output Generation
320
+
321
+ ### Generate Analysis JSON
322
+
323
+ Transform the analyzed data into the standard output format:
324
+
325
+ ```json
326
+ {
327
+ "entities": {
328
+ "[EntityName]": {
329
+ "purpose": "[From data-concepts.json description]",
330
+ "dataDependencies": "[Dependencies identified in Step 2]",
331
+ "computationMethod": "[Creation pattern description]",
332
+ "lifecycle": {
333
+ "creation": {
334
+ "type": "[interaction-created | derived | created-with-parent | mutation-derived]",
335
+ "parent": "[Parent entity name if created-with-parent]",
336
+ "creationInteractions": "[List from Step 2.1]"
337
+ },
338
+ "deletion": {
339
+ "canBeDeleted": "[true/false based on Step 2.2]",
340
+ "deletionType": "[soft-delete | hard-delete | auto-delete]",
341
+ "deletionInteractions": "[List from Step 2.2]"
342
+ }
343
+ },
344
+ "properties": {
345
+ "[propertyName]": {
346
+ "type": "[From data-concepts.json]",
347
+ "purpose": "[From data-concepts.json or inferred]",
348
+ "controlType": "[From Step 3.4]",
349
+ "dataDependencies": "[From Step 3.1]",
350
+ "interactionDependencies": "[From Step 3.2]",
351
+ "computationMethod": "[From Step 3.3]",
352
+ "initialValue": "[Default or creation logic]"
353
+ }
354
+ }
355
+ }
356
+ },
357
+ "relations": {
358
+ "[RelationName]": {
359
+ "type": "[From data-concepts.json cardinality]",
360
+ "purpose": "[From data-concepts.json description]",
361
+ "sourceEntity": "[From data-concepts.json]",
362
+ "targetEntity": "[From data-concepts.json]",
363
+ "sourceProperty": "[Inferred or specified]",
364
+ "targetProperty": "[Inferred or specified]",
365
+ "dataDependencies": "[Always includes source and target entities]",
366
+ "computationMethod": "[From Step 4.2]",
367
+ "lifecycle": {
368
+ "creation": {
369
+ "type": "[interaction-created | created-with-entity | derived | mutation-derived]",
370
+ "parent": "[If created-with-entity]",
371
+ "creationInteractions": "[From Step 4.2]"
372
+ },
373
+ "deletion": {
374
+ "canBeDeleted": "[Based on analysis]",
375
+ "deletionType": "[Type identified]",
376
+ "deletionInteractions": "[List of interactions]"
377
+ }
378
+ },
379
+ "properties": {
380
+ "[propertyName]": {
381
+ // Same structure as entity properties
382
+ }
383
+ }
384
+ }
385
+ },
386
+ "dictionaries": {
387
+ "[DictionaryName]": {
388
+ "purpose": "[From data-concepts.json description]",
389
+ "type": "[object with key types]",
390
+ "dataDependencies": "[From Step 5.2]",
391
+ "interactionDependencies": "[From Step 5.2]",
392
+ "computationMethod": "[From Step 5.2]"
393
+ }
394
+ }
395
+ }
396
+ ```
397
+
398
+ ## Best Practices for Analysis
399
+
400
+ ### 1. Cross-Reference Data Operations
401
+
402
+ Always verify entity/property modifications by:
403
+ - Checking all interactions that mention the entity
404
+ - Looking for indirect updates through relations
405
+ - Identifying cascade effects in dataConstraints
406
+
407
+ ### 2. Identify Computation Patterns
408
+
409
+ When analyzing computed properties:
410
+ - Look for standard patterns (Count, Sum, Average, etc.)
411
+ - Identify if computation can use built-in interaqt computations
412
+ - Document complex custom logic clearly
413
+
414
+ ### 3. Track Dependency Chains
415
+
416
+ Ensure all dependencies are identified:
417
+ - Direct data dependencies from computation logic
418
+ - Indirect dependencies through relations
419
+ - Interaction chains that affect the data
420
+
421
+ ### 4. Validate Lifecycle Consistency
422
+
423
+ Verify that:
424
+ - Creation patterns match the business logic
425
+ - Deletion handling preserves data integrity
426
+ - Parent-child relationships are properly maintained
427
+
428
+ ## Common Analysis Patterns
429
+
430
+ ### 1. Aggregation Properties
431
+ Properties that count or sum related data:
432
+ ```json
433
+ "currentOccupancy": {
434
+ "dataDependencies": ["Bed", "UserBedAssignment"],
435
+ "computationMethod": "Count of occupied beds (Bed.isOccupied = true)"
436
+ }
437
+ ```
438
+
439
+ ### 2. Status-Driven Properties
440
+ Properties that change based on interactions:
441
+ ```json
442
+ "status": {
443
+ "interactionDependencies": ["CreateUser", "ActivateUser", "DeactivateUser"],
444
+ "computationMethod": "Set by interactions, defaults to 'active' on creation"
445
+ }
446
+ ```
447
+
448
+ ### 3. Cascading Updates
449
+ Properties affected by multiple sources:
450
+ ```json
451
+ "behaviorScore": {
452
+ "dataDependencies": ["BehaviorViolation"],
453
+ "interactionDependencies": ["ModifyBehaviorScore"],
454
+ "computationMethod": "Base score minus sum of violations, can be overridden by admin"
455
+ }
456
+ ```
457
+
458
+ ### 4. Derived Entities
459
+ Entities filtered from base entities:
460
+ ```json
461
+ "ActiveUser": {
462
+ "computationMethod": "Derived from User where lastLoginDate > (now - 30 days)",
463
+ "lifecycle": {
464
+ "creation": {
465
+ "type": "derived",
466
+ "parent": null,
467
+ "creationInteractions": []
468
+ }
469
+ }
470
+ }
471
+ ```
472
+
473
+ ## Validation Checklist
474
+
475
+ - [ ] All entities from data-concepts.json are analyzed
476
+ - [ ] All relations from data-concepts.json are analyzed
477
+ - [ ] All dictionaries from data-concepts.json are analyzed
478
+ - [ ] Creation patterns identified for each entity/relation
479
+ - [ ] Interaction dependencies found by searching interactions-design.json
480
+ - [ ] Data dependencies match computed property definitions
481
+ - [ ] Lifecycle patterns are consistent with business logic
482
+ - [ ] Parent-child relationships properly identified
483
+ - [ ] All properties have defined control types
484
+ - [ ] Computation methods clearly documented