@plures/praxis 1.4.4 → 2.0.3
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.
- package/README.md +164 -1067
- package/dist/browser/chunk-IUEKGHQN.js +373 -0
- package/dist/browser/factory/index.d.ts +2 -1
- package/dist/browser/index.d.ts +7 -4
- package/dist/browser/index.js +18 -6
- package/dist/browser/integrations/svelte.d.ts +4 -3
- package/dist/browser/project/index.d.ts +2 -1
- package/dist/browser/{reactive-engine.svelte-DgVTqHLc.d.ts → reactive-engine.svelte-BwWadvAW.d.ts} +2 -1
- package/dist/browser/rule-result-DcXWe9tn.d.ts +206 -0
- package/dist/browser/{rules-i1LHpnGd.d.ts → rules-BaWMqxuG.d.ts} +2 -205
- package/dist/browser/unified/index.d.ts +239 -0
- package/dist/browser/unified/index.js +20 -0
- package/dist/node/chunk-IUEKGHQN.js +373 -0
- package/dist/node/cli/index.js +1 -1
- package/dist/node/index.cjs +377 -0
- package/dist/node/index.d.cts +4 -2
- package/dist/node/index.d.ts +4 -2
- package/dist/node/index.js +19 -7
- package/dist/node/integrations/svelte.d.cts +3 -2
- package/dist/node/integrations/svelte.d.ts +3 -2
- package/dist/node/integrations/svelte.js +2 -2
- package/dist/node/{reactive-engine.svelte-DekxqFu0.d.ts → reactive-engine.svelte-BBZLMzus.d.ts} +3 -79
- package/dist/node/{reactive-engine.svelte-Cg0Yc2Hs.d.cts → reactive-engine.svelte-Cbq_V20o.d.cts} +3 -79
- package/dist/node/rule-result-B9GMivAn.d.cts +80 -0
- package/dist/node/rule-result-Bo3sFMmN.d.ts +80 -0
- package/dist/node/unified/index.cjs +494 -0
- package/dist/node/unified/index.d.cts +240 -0
- package/dist/node/unified/index.d.ts +240 -0
- package/dist/node/unified/index.js +21 -0
- package/docs/README.md +58 -102
- package/docs/archive/1.x/CONVERSATIONS_IMPLEMENTATION.md +207 -0
- package/docs/archive/1.x/DECISION_LEDGER_IMPLEMENTATION.md +109 -0
- package/docs/archive/1.x/DECISION_LEDGER_SUMMARY.md +424 -0
- package/docs/archive/1.x/ELEVATION_SUMMARY.md +249 -0
- package/docs/archive/1.x/FEATURE_SUMMARY.md +238 -0
- package/docs/archive/1.x/GOLDEN_PATH_IMPLEMENTATION.md +280 -0
- package/docs/archive/1.x/IMPLEMENTATION.md +166 -0
- package/docs/archive/1.x/IMPLEMENTATION_COMPLETE.md +389 -0
- package/docs/archive/1.x/IMPLEMENTATION_SUMMARY.md +59 -0
- package/docs/archive/1.x/INTEGRATION_ENHANCEMENT_SUMMARY.md +238 -0
- package/docs/archive/1.x/KNO_ENG_REFACTORING_SUMMARY.md +198 -0
- package/docs/archive/1.x/MONOREPO_SUMMARY.md +158 -0
- package/docs/archive/1.x/README.md +28 -0
- package/docs/archive/1.x/SVELTE_INTEGRATION_SUMMARY.md +415 -0
- package/docs/archive/1.x/TASK_1_COMPLETE.md +235 -0
- package/docs/archive/1.x/TASK_1_SUMMARY.md +281 -0
- package/docs/archive/1.x/VERSION_0.2.0_RELEASE_NOTES.md +288 -0
- package/docs/archive/1.x/ValidationChecklist.md +7 -0
- package/package.json +13 -1
- package/src/index.browser.ts +20 -0
- package/src/index.ts +21 -0
- package/src/unified/__tests__/unified-qa.test.ts +761 -0
- package/src/unified/__tests__/unified.test.ts +396 -0
- package/src/unified/core.ts +534 -0
- package/src/unified/index.ts +32 -0
- package/src/unified/rules.ts +66 -0
- package/src/unified/types.ts +148 -0
- package/dist/node/{chunk-ZO2LU4G4.js → chunk-WFRHXZBP.js} +3 -3
- package/dist/node/{validate-5PSWJTIC.js → validate-BY7JNY7H.js} +1 -1
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# Core Feature Implementation Summary
|
|
2
|
+
|
|
3
|
+
This document summarizes the major features added in this release to fulfill the requirements outlined in the issue.
|
|
4
|
+
|
|
5
|
+
## Issue Requirements
|
|
6
|
+
|
|
7
|
+
The issue requested 5 major features:
|
|
8
|
+
|
|
9
|
+
1. **Harden the TypeScript core first** - Comprehensive tests with edge cases, actor behavior, and failure paths
|
|
10
|
+
2. **Ship one "hero" example** - Demonstrating auth + shopping cart + feature flags with full Praxis integration
|
|
11
|
+
3. **Document the protocol versioning** - Explicit versioned protocol with stability guarantees
|
|
12
|
+
4. **Start with one non-TS implementation** - PowerShell adapter calling TS engine via CLI/HTTP boundary
|
|
13
|
+
5. **Visualization / introspection hooks** - Registry introspection and graph output for external tools
|
|
14
|
+
|
|
15
|
+
## Implementation Status
|
|
16
|
+
|
|
17
|
+
### ✅ 1. Hardened TypeScript Core
|
|
18
|
+
|
|
19
|
+
**Test Coverage Expansion:**
|
|
20
|
+
|
|
21
|
+
- Tests increased from 18 → 63 (250% increase)
|
|
22
|
+
- Added `src/__tests__/actors.test.ts` (12 tests)
|
|
23
|
+
- Added `src/__tests__/edge-cases.test.ts` (19 tests)
|
|
24
|
+
- Added `src/__tests__/introspection.test.ts` (14 tests)
|
|
25
|
+
- Updated `vitest.config.ts` to exclude legacy tests
|
|
26
|
+
- 100% pass rate on all tests
|
|
27
|
+
|
|
28
|
+
**Test Categories:**
|
|
29
|
+
|
|
30
|
+
- **Actor Behavior**: Lifecycle (start/stop), state change notifications, async methods, timer actors
|
|
31
|
+
- **Edge Cases**: Empty events, large datasets, null/undefined payloads, nested contexts, duplicate events
|
|
32
|
+
- **Failure Paths**: Rule errors, constraint violations, missing IDs, registry operations
|
|
33
|
+
- **Introspection**: Schema generation, graph export, search, statistics
|
|
34
|
+
|
|
35
|
+
### ✅ 2. Hero Example: E-Commerce Platform
|
|
36
|
+
|
|
37
|
+
**Location:** `src/examples/hero-ecommerce/index.ts`
|
|
38
|
+
|
|
39
|
+
**Features Demonstrated:**
|
|
40
|
+
|
|
41
|
+
- **Authentication Module**
|
|
42
|
+
- Login/logout with session management
|
|
43
|
+
- Session timeout (30 minutes)
|
|
44
|
+
- Single session enforcement
|
|
45
|
+
- **Shopping Cart Module**
|
|
46
|
+
- Add/remove items
|
|
47
|
+
- Dynamic total calculation
|
|
48
|
+
- Discount code system (SAVE10, SAVE20, FREESHIP)
|
|
49
|
+
- Checkout process
|
|
50
|
+
- Cart clearing on logout
|
|
51
|
+
- **Feature Flags Module**
|
|
52
|
+
- Free shipping toggle
|
|
53
|
+
- Loyalty program toggle
|
|
54
|
+
- New checkout flow toggle
|
|
55
|
+
- A/B testing capabilities
|
|
56
|
+
- **Business Logic**
|
|
57
|
+
- Loyalty points (1 point per dollar)
|
|
58
|
+
- Order history tracking
|
|
59
|
+
- Conditional discounts based on loyalty points
|
|
60
|
+
- Feature flag-based promotions
|
|
61
|
+
- **Actors**
|
|
62
|
+
- Logging actor for important events
|
|
63
|
+
- Analytics actor for metrics tracking
|
|
64
|
+
- **Constraints**
|
|
65
|
+
- Max 100 items in cart
|
|
66
|
+
- Authentication required for cart operations
|
|
67
|
+
- Business rule validation
|
|
68
|
+
|
|
69
|
+
**Running the Example:**
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm run build
|
|
73
|
+
node dist/examples/hero-ecommerce/index.js
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### ✅ 3. Protocol Versioning (v1.0.0)
|
|
77
|
+
|
|
78
|
+
**Protocol Changes:**
|
|
79
|
+
|
|
80
|
+
- Added `protocolVersion?: string` field to `PraxisState` interface
|
|
81
|
+
- Exported `PRAXIS_PROTOCOL_VERSION = "1.0.0"` constant
|
|
82
|
+
- Engine automatically sets protocol version on state creation
|
|
83
|
+
|
|
84
|
+
**Documentation:** `PROTOCOL_VERSIONING.md`
|
|
85
|
+
|
|
86
|
+
- **Semantic Versioning**: MAJOR.MINOR.PATCH strategy
|
|
87
|
+
- **Stability Guarantees**:
|
|
88
|
+
- Core types remain stable within major version
|
|
89
|
+
- JSON compatibility guaranteed
|
|
90
|
+
- Cross-language coordination for changes
|
|
91
|
+
- Migration paths for major versions
|
|
92
|
+
- **Version Checking Examples**: TypeScript, C#, PowerShell
|
|
93
|
+
- **Extension Guidelines**: Language-specific features marked as optional
|
|
94
|
+
|
|
95
|
+
**Key Guarantees:**
|
|
96
|
+
|
|
97
|
+
1. Core types won't change in breaking ways within same major version
|
|
98
|
+
2. All protocol types remain JSON-serializable
|
|
99
|
+
3. Changes coordinated across all official implementations
|
|
100
|
+
4. 6-month support for previous major version
|
|
101
|
+
5. Compatibility shims where possible
|
|
102
|
+
|
|
103
|
+
### ✅ 4. PowerShell Adapter
|
|
104
|
+
|
|
105
|
+
**PowerShell Module:** `powershell/Praxis.psm1`
|
|
106
|
+
|
|
107
|
+
**Cmdlets Provided:**
|
|
108
|
+
|
|
109
|
+
1. `Initialize-PraxisAdapter` - Connect to TypeScript engine
|
|
110
|
+
2. `New-PraxisState` - Create state with context
|
|
111
|
+
3. `New-PraxisEvent` - Create typed event
|
|
112
|
+
4. `New-PraxisFact` - Create typed fact
|
|
113
|
+
5. `Invoke-PraxisStep` - Process events through engine
|
|
114
|
+
6. `Test-PraxisProtocolVersion` - Check compatibility
|
|
115
|
+
7. `Get-PraxisInfo` - Get module information
|
|
116
|
+
|
|
117
|
+
**CLI Adapter:** `src/adapters/cli.ts`
|
|
118
|
+
|
|
119
|
+
- JSON stdin/stdout interface
|
|
120
|
+
- Node.js bridge to TypeScript engine
|
|
121
|
+
- Registry configuration from JSON files
|
|
122
|
+
- Error handling and validation
|
|
123
|
+
|
|
124
|
+
**Example:** `powershell/examples/counter-example.ps1`
|
|
125
|
+
|
|
126
|
+
- Counter application in PowerShell
|
|
127
|
+
- Protocol version checking
|
|
128
|
+
- Error handling demonstration
|
|
129
|
+
- Configuration file: `counter-config.json`
|
|
130
|
+
|
|
131
|
+
**Documentation:** `powershell/README.md`
|
|
132
|
+
|
|
133
|
+
- Installation instructions
|
|
134
|
+
- API reference for all cmdlets
|
|
135
|
+
- Usage examples
|
|
136
|
+
- Configuration file format
|
|
137
|
+
- Architecture diagram
|
|
138
|
+
- Limitations and future enhancements
|
|
139
|
+
|
|
140
|
+
### ✅ 5. Visualization & Introspection
|
|
141
|
+
|
|
142
|
+
**New Module:** `src/core/introspection.ts`
|
|
143
|
+
|
|
144
|
+
**RegistryIntrospector Class Methods:**
|
|
145
|
+
|
|
146
|
+
1. `getStats()` - Registry statistics (counts, IDs)
|
|
147
|
+
2. `generateSchema(version)` - JSON schema output
|
|
148
|
+
3. `generateGraph()` - Graph representation with nodes/edges
|
|
149
|
+
4. `exportDOT()` - Graphviz DOT format export
|
|
150
|
+
5. `exportMermaid()` - Mermaid diagram export
|
|
151
|
+
6. `getRuleInfo(id)` - Detailed rule information
|
|
152
|
+
7. `getConstraintInfo(id)` - Detailed constraint information
|
|
153
|
+
8. `searchRules(query)` - Text search in rules
|
|
154
|
+
9. `searchConstraints(query)` - Text search in constraints
|
|
155
|
+
|
|
156
|
+
**Graph Features:**
|
|
157
|
+
|
|
158
|
+
- Nodes for rules and constraints
|
|
159
|
+
- Edges for dependencies (via metadata)
|
|
160
|
+
- Constraint relationships (constrains, depends-on)
|
|
161
|
+
- Visual differentiation (boxes for rules, diamonds for constraints)
|
|
162
|
+
|
|
163
|
+
**Export Formats:**
|
|
164
|
+
|
|
165
|
+
- **DOT**: For Graphviz tools and online renderers
|
|
166
|
+
- **Mermaid**: For markdown documentation and GitHub
|
|
167
|
+
- **JSON Schema**: For documentation generators and IDE support
|
|
168
|
+
|
|
169
|
+
**Tests:** `src/__tests__/introspection.test.ts` (14 tests)
|
|
170
|
+
|
|
171
|
+
- Statistics retrieval
|
|
172
|
+
- Schema generation
|
|
173
|
+
- Graph generation with dependencies
|
|
174
|
+
- Export format validation
|
|
175
|
+
- Search functionality
|
|
176
|
+
- Empty registry handling
|
|
177
|
+
- Module introspection
|
|
178
|
+
|
|
179
|
+
## Documentation Updates
|
|
180
|
+
|
|
181
|
+
### Main README
|
|
182
|
+
|
|
183
|
+
- Added "What's New" section highlighting all 5 features
|
|
184
|
+
- Updated architecture diagram
|
|
185
|
+
- Added introspection API examples
|
|
186
|
+
- Added cross-language usage section (PowerShell)
|
|
187
|
+
- Updated examples list with hero example
|
|
188
|
+
- Enhanced features list with new capabilities
|
|
189
|
+
|
|
190
|
+
### New Documentation Files
|
|
191
|
+
|
|
192
|
+
1. `PROTOCOL_VERSIONING.md` - Comprehensive protocol versioning guide
|
|
193
|
+
2. `powershell/README.md` - PowerShell adapter documentation
|
|
194
|
+
3. `FEATURE_SUMMARY.md` - This file
|
|
195
|
+
|
|
196
|
+
## Metrics
|
|
197
|
+
|
|
198
|
+
### Code Additions
|
|
199
|
+
|
|
200
|
+
- **Tests**: +45 tests (+250%)
|
|
201
|
+
- **Examples**: +1 hero example (657 lines)
|
|
202
|
+
- **Core Modules**: +1 introspection module (350 lines)
|
|
203
|
+
- **Adapters**: +1 CLI adapter (180 lines)
|
|
204
|
+
- **Cross-Language**: +1 PowerShell module (250 lines)
|
|
205
|
+
- **Documentation**: +3 comprehensive docs (15,000+ words)
|
|
206
|
+
|
|
207
|
+
### Quality Metrics
|
|
208
|
+
|
|
209
|
+
- **Test Pass Rate**: 100% (63/63 tests)
|
|
210
|
+
- **Build Status**: Clean compilation with strict TypeScript
|
|
211
|
+
- **TypeScript Errors**: 0
|
|
212
|
+
- **Linting Issues**: 0
|
|
213
|
+
- **Breaking Changes**: 0
|
|
214
|
+
|
|
215
|
+
## Future Work
|
|
216
|
+
|
|
217
|
+
The foundation is now in place for:
|
|
218
|
+
|
|
219
|
+
1. **C# Adapter** - Following same pattern as PowerShell
|
|
220
|
+
2. **VSCode Extension** - Using introspection API
|
|
221
|
+
3. **Documentation Generator** - Using schema generation
|
|
222
|
+
4. **Property-Based Testing** - With expanded test infrastructure
|
|
223
|
+
5. **Visual Rule Designer** - Using graph export capabilities
|
|
224
|
+
6. **Performance Optimizations** - For persistent engine instances in CLI
|
|
225
|
+
7. **Event Sourcing** - With PluresDB integration
|
|
226
|
+
|
|
227
|
+
## Conclusion
|
|
228
|
+
|
|
229
|
+
All 5 requested features have been successfully implemented with:
|
|
230
|
+
|
|
231
|
+
- ✅ Production-ready quality
|
|
232
|
+
- ✅ Comprehensive testing
|
|
233
|
+
- ✅ Detailed documentation
|
|
234
|
+
- ✅ Working examples
|
|
235
|
+
- ✅ No breaking changes
|
|
236
|
+
- ✅ Cross-language foundation established
|
|
237
|
+
|
|
238
|
+
The Praxis engine is now hardened, well-tested, versioned, introspectable, and cross-language compatible.
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# Praxis v0.2 — Golden Path Implementation
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This document summarizes the implementation of the Praxis v0.2 "Golden Path" — a complete pipeline from schema definition to runnable application.
|
|
6
|
+
|
|
7
|
+
## What Was Implemented
|
|
8
|
+
|
|
9
|
+
### 1. Schema System (✅ Complete)
|
|
10
|
+
|
|
11
|
+
**Files:**
|
|
12
|
+
|
|
13
|
+
- `src/core/schema/types.ts` (existing, already complete)
|
|
14
|
+
- `src/core/schema/loader.ts` (new)
|
|
15
|
+
- `src/core/schema/normalize.ts` (new)
|
|
16
|
+
|
|
17
|
+
**Features:**
|
|
18
|
+
|
|
19
|
+
- Schema validation with clear error messages
|
|
20
|
+
- Schema loading from JavaScript files
|
|
21
|
+
- Schema normalization with model resolution
|
|
22
|
+
- Reference expansion and dependency tracking
|
|
23
|
+
|
|
24
|
+
### 2. Code Generators (✅ Complete)
|
|
25
|
+
|
|
26
|
+
**Logic Generator** (`src/core/logic/generator.ts`)
|
|
27
|
+
|
|
28
|
+
- Generates `facts.ts` with typed fact definitions
|
|
29
|
+
- Generates `events.ts` with typed event definitions
|
|
30
|
+
- Generates `rules.ts` with rule scaffolds and TODOs
|
|
31
|
+
- Generates `engine.ts` with context types and engine setup
|
|
32
|
+
- Generates `index.ts` for convenient imports
|
|
33
|
+
|
|
34
|
+
**Component Generator** (`src/core/component/generator.ts`)
|
|
35
|
+
|
|
36
|
+
- Already existed, integrated into pipeline
|
|
37
|
+
- Generates Svelte components from schema
|
|
38
|
+
- Includes TypeScript types and documentation
|
|
39
|
+
- Supports form, list, display, and custom components
|
|
40
|
+
|
|
41
|
+
**PluresDB Generator** (`src/core/pluresdb/generator.ts`)
|
|
42
|
+
|
|
43
|
+
- Generates database configuration
|
|
44
|
+
- Creates stores for each model
|
|
45
|
+
- Defines indexes based on schema
|
|
46
|
+
- Supports sync configuration
|
|
47
|
+
|
|
48
|
+
### 3. CLI Command (✅ Complete)
|
|
49
|
+
|
|
50
|
+
**File:** `src/cli/commands/generate.ts`
|
|
51
|
+
|
|
52
|
+
**Usage:**
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Generate all code from schema
|
|
56
|
+
praxis generate --schema praxis.schema.js
|
|
57
|
+
|
|
58
|
+
# Generate specific target
|
|
59
|
+
praxis generate --schema praxis.schema.js --target logic
|
|
60
|
+
praxis generate --schema praxis.schema.js --target components
|
|
61
|
+
praxis generate --schema praxis.schema.js --target pluresdb
|
|
62
|
+
|
|
63
|
+
# Custom output directory
|
|
64
|
+
praxis generate --schema praxis.schema.js --output ./src/generated
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Features:**
|
|
68
|
+
|
|
69
|
+
- Loads and validates schema
|
|
70
|
+
- Normalizes schema for generation
|
|
71
|
+
- Generates all artifacts or specific targets
|
|
72
|
+
- Clear progress output with ✓ checkmarks
|
|
73
|
+
- Helpful error messages
|
|
74
|
+
|
|
75
|
+
### 4. Tests (✅ Complete)
|
|
76
|
+
|
|
77
|
+
**Schema Tests** (`src/__tests__/schema.test.ts`)
|
|
78
|
+
|
|
79
|
+
- 8 tests covering validation and normalization
|
|
80
|
+
- Tests schema templates
|
|
81
|
+
- Tests model dependency resolution
|
|
82
|
+
- Tests component-model resolution
|
|
83
|
+
|
|
84
|
+
**Generator Tests** (`src/__tests__/generators.test.ts`)
|
|
85
|
+
|
|
86
|
+
- 12 tests covering all generators
|
|
87
|
+
- Tests logic file generation
|
|
88
|
+
- Tests component generation
|
|
89
|
+
- Tests PluresDB config generation
|
|
90
|
+
- Tests options and configuration
|
|
91
|
+
|
|
92
|
+
**Test Results:**
|
|
93
|
+
|
|
94
|
+
- 83 total tests passing
|
|
95
|
+
- 8 test files
|
|
96
|
+
- No failing tests
|
|
97
|
+
- No security vulnerabilities (CodeQL clean)
|
|
98
|
+
|
|
99
|
+
### 5. Example Application (✅ Complete)
|
|
100
|
+
|
|
101
|
+
**Location:** `examples/simple-app/`
|
|
102
|
+
|
|
103
|
+
**Contents:**
|
|
104
|
+
|
|
105
|
+
- `praxis.schema.js` - Complete TodoApp schema
|
|
106
|
+
- `README.md` - Comprehensive guide
|
|
107
|
+
- Generated code demonstrating full pipeline
|
|
108
|
+
|
|
109
|
+
**Schema Includes:**
|
|
110
|
+
|
|
111
|
+
- Models: Todo with typed fields
|
|
112
|
+
- Components: TodoForm, TodoList, TodoItem
|
|
113
|
+
- Logic: Events, facts, rules, and constraints
|
|
114
|
+
- Full CRUD operations
|
|
115
|
+
|
|
116
|
+
## Generated Code Structure
|
|
117
|
+
|
|
118
|
+
When you run `praxis generate`, you get:
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
generated/
|
|
122
|
+
├── logic/
|
|
123
|
+
│ ├── facts.ts # Typed fact definitions
|
|
124
|
+
│ ├── events.ts # Typed event definitions
|
|
125
|
+
│ ├── rules.ts # Rule implementations (with TODOs)
|
|
126
|
+
│ ├── engine.ts # Engine setup with context types
|
|
127
|
+
│ └── index.ts # Convenient exports
|
|
128
|
+
├── components/
|
|
129
|
+
│ ├── [Component].svelte # Svelte component
|
|
130
|
+
│ ├── [Component].types.ts # TypeScript types
|
|
131
|
+
│ └── [Component].md # Documentation
|
|
132
|
+
└── pluresdb-config.ts # Database configuration
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Example Workflow
|
|
136
|
+
|
|
137
|
+
### 1. Define Schema
|
|
138
|
+
|
|
139
|
+
```javascript
|
|
140
|
+
// praxis.schema.js
|
|
141
|
+
export const schema = {
|
|
142
|
+
version: '1.0.0',
|
|
143
|
+
name: 'MyApp',
|
|
144
|
+
models: [
|
|
145
|
+
{
|
|
146
|
+
name: 'User',
|
|
147
|
+
fields: [
|
|
148
|
+
{ name: 'id', type: 'string' },
|
|
149
|
+
{ name: 'name', type: 'string' },
|
|
150
|
+
],
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
components: [
|
|
154
|
+
{
|
|
155
|
+
name: 'UserForm',
|
|
156
|
+
type: 'form',
|
|
157
|
+
model: 'User',
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
logic: [
|
|
161
|
+
{
|
|
162
|
+
id: 'user-logic',
|
|
163
|
+
events: [{ tag: 'CREATE_USER', payload: { name: 'string' } }],
|
|
164
|
+
facts: [{ tag: 'UserCreated', payload: { userId: 'string' } }],
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
};
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 2. Generate Code
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
praxis generate --schema praxis.schema.js
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Output:
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
✓ Schema loaded successfully
|
|
180
|
+
✓ Schema normalized
|
|
181
|
+
✓ Logic module generated
|
|
182
|
+
✓ Components generated
|
|
183
|
+
✓ PluresDB config generated
|
|
184
|
+
✅ Generation complete! 12 files generated.
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### 3. Use Generated Code
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
import { createEngine } from './generated/logic/engine.js';
|
|
191
|
+
import { CREATE_USER } from './generated/logic/events.js';
|
|
192
|
+
|
|
193
|
+
const engine = createEngine();
|
|
194
|
+
const result = engine.step([CREATE_USER.create({ name: 'Alice' })]);
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Technical Decisions
|
|
198
|
+
|
|
199
|
+
### TypeScript Compilation
|
|
200
|
+
|
|
201
|
+
- Schema files must be JavaScript (.js) or pre-compiled TypeScript
|
|
202
|
+
- This avoids runtime TypeScript compilation complexity
|
|
203
|
+
- Users can compile their schemas with `tsc` if needed
|
|
204
|
+
|
|
205
|
+
### Code Generation Strategy
|
|
206
|
+
|
|
207
|
+
- Generate complete but minimal code
|
|
208
|
+
- Include helpful TODOs where manual work is needed
|
|
209
|
+
- Preserve existing patterns (e.g., defineFact, defineEvent)
|
|
210
|
+
- Type-safe by default
|
|
211
|
+
|
|
212
|
+
### File Organization
|
|
213
|
+
|
|
214
|
+
- Separate files for facts, events, rules
|
|
215
|
+
- Single engine.ts for setup and types
|
|
216
|
+
- Components get separate files per component
|
|
217
|
+
- PluresDB config in single file
|
|
218
|
+
|
|
219
|
+
## Validation & Safety
|
|
220
|
+
|
|
221
|
+
### Schema Validation
|
|
222
|
+
|
|
223
|
+
- Required fields checked (version, name, models)
|
|
224
|
+
- Model fields validated
|
|
225
|
+
- Clear error messages with paths
|
|
226
|
+
|
|
227
|
+
### Generation Validation
|
|
228
|
+
|
|
229
|
+
- Checks for at least one model
|
|
230
|
+
- Validates model fields
|
|
231
|
+
- Type-safe TypeScript output
|
|
232
|
+
|
|
233
|
+
### Security
|
|
234
|
+
|
|
235
|
+
- CodeQL scan: 0 vulnerabilities
|
|
236
|
+
- No eval or dynamic code execution
|
|
237
|
+
- Pure file generation from AST
|
|
238
|
+
|
|
239
|
+
## Next Steps (Future Work)
|
|
240
|
+
|
|
241
|
+
1. **Watch Mode**: Implement file watching for auto-regeneration
|
|
242
|
+
2. **TypeScript Schemas**: Add tsx loader for .ts schema files
|
|
243
|
+
3. **Incremental Generation**: Only regenerate changed files
|
|
244
|
+
4. **Templates**: Custom code templates
|
|
245
|
+
5. **Migrations**: Schema version migrations
|
|
246
|
+
6. **Visual Editor**: CodeCanvas integration
|
|
247
|
+
|
|
248
|
+
## Breaking Changes
|
|
249
|
+
|
|
250
|
+
None - this is a new feature set.
|
|
251
|
+
|
|
252
|
+
## Migration Guide
|
|
253
|
+
|
|
254
|
+
No migration needed. This is v0.2 adding new functionality.
|
|
255
|
+
|
|
256
|
+
## Documentation
|
|
257
|
+
|
|
258
|
+
- Schema types: `src/core/schema/types.ts`
|
|
259
|
+
- Usage examples: `examples/simple-app/README.md`
|
|
260
|
+
- Test examples: `src/__tests__/schema.test.ts`
|
|
261
|
+
|
|
262
|
+
## Metrics
|
|
263
|
+
|
|
264
|
+
- **Files Added**: 8 new source files
|
|
265
|
+
- **Lines of Code**: ~2,500 lines
|
|
266
|
+
- **Tests Added**: 20 new tests
|
|
267
|
+
- **Test Coverage**: All new code tested
|
|
268
|
+
- **Build Time**: <5 seconds
|
|
269
|
+
- **Generation Time**: <1 second
|
|
270
|
+
|
|
271
|
+
## Conclusion
|
|
272
|
+
|
|
273
|
+
The Praxis v0.2 Golden Path is complete and functional. Developers can now:
|
|
274
|
+
|
|
275
|
+
1. Define a schema in JavaScript
|
|
276
|
+
2. Run `praxis generate`
|
|
277
|
+
3. Get complete logic modules, components, and database config
|
|
278
|
+
4. Build and run their application
|
|
279
|
+
|
|
280
|
+
This establishes Praxis as a true full-stack framework with a schema-driven development workflow.
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Praxis Implementation Summary
|
|
2
|
+
|
|
3
|
+
This document summarizes the initial implementation of the Praxis TypeScript library.
|
|
4
|
+
|
|
5
|
+
## What Was Implemented
|
|
6
|
+
|
|
7
|
+
### Core Architecture
|
|
8
|
+
|
|
9
|
+
1. **Language-Neutral Protocol** (`src/core/protocol.ts`)
|
|
10
|
+
- `PraxisFact` - Typed propositions about the domain
|
|
11
|
+
- `PraxisEvent` - Temporally ordered facts for state changes
|
|
12
|
+
- `PraxisState` - Current state with context and facts
|
|
13
|
+
- `PraxisStepFn` - Pure, deterministic step function
|
|
14
|
+
- JSON-friendly types for cross-language compatibility
|
|
15
|
+
|
|
16
|
+
2. **Rules and Constraints System** (`src/core/rules.ts`)
|
|
17
|
+
- `RuleFn` - Pure functions that derive new facts
|
|
18
|
+
- `ConstraintFn` - Predicates that check invariants
|
|
19
|
+
- `PraxisRegistry` - Registry for rules and constraints with stable IDs
|
|
20
|
+
- `PraxisModule` - Bundles of rules and constraints
|
|
21
|
+
|
|
22
|
+
3. **Logic Engine** (`src/core/engine.ts`)
|
|
23
|
+
- `LogicEngine<TContext>` - Main engine with strongly-typed context
|
|
24
|
+
- `createPraxisEngine` - Factory function
|
|
25
|
+
- Pure, immutable state updates
|
|
26
|
+
- Automatic rule application and constraint checking
|
|
27
|
+
|
|
28
|
+
4. **Actor System** (`src/core/actors.ts`)
|
|
29
|
+
- `Actor<TContext>` - Interface for effectful units
|
|
30
|
+
- `ActorManager` - Lifecycle management for actors
|
|
31
|
+
- `createTimerActor` - Helper for timer-based actors
|
|
32
|
+
- Bridge between pure logic and side effects
|
|
33
|
+
|
|
34
|
+
### DSL and Helpers
|
|
35
|
+
|
|
36
|
+
5. **DSL Helpers** (`src/dsl/index.ts`)
|
|
37
|
+
- `defineFact<TTag, TPayload>` - Define typed facts with type guards
|
|
38
|
+
- `defineEvent<TTag, TPayload>` - Define typed events with type guards
|
|
39
|
+
- `defineRule` - Define rules with descriptors
|
|
40
|
+
- `defineConstraint` - Define constraints with descriptors
|
|
41
|
+
- `defineModule` - Bundle rules and constraints
|
|
42
|
+
- Helper functions: `findEvent`, `findFact`, `filterEvents`, `filterFacts`
|
|
43
|
+
|
|
44
|
+
### Integrations
|
|
45
|
+
|
|
46
|
+
6. **Svelte v5 Integration** (`src/integrations/svelte.ts`)
|
|
47
|
+
- `createPraxisStore` - Convert engine to Svelte store
|
|
48
|
+
- `createContextStore` - Extract context as store
|
|
49
|
+
- `createDerivedStore` - Derive specific values from context
|
|
50
|
+
- Reactive bindings for Svelte v5
|
|
51
|
+
|
|
52
|
+
7. **PluresDB Integration** (`src/integrations/pluresdb.ts`)
|
|
53
|
+
- Placeholder implementation
|
|
54
|
+
- Interface definitions for future event sourcing
|
|
55
|
+
- Designed for reactive queries and subscriptions
|
|
56
|
+
|
|
57
|
+
### Examples
|
|
58
|
+
|
|
59
|
+
8. **Auth Basic Example** (`src/examples/auth-basic/`)
|
|
60
|
+
- Login/logout logic with facts and events
|
|
61
|
+
- Session management
|
|
62
|
+
- Constraint checking for single sessions
|
|
63
|
+
- Demonstrates basic Praxis usage
|
|
64
|
+
|
|
65
|
+
9. **Cart Example** (`src/examples/cart/`)
|
|
66
|
+
- Shopping cart with multiple items
|
|
67
|
+
- Discount application
|
|
68
|
+
- Complex state derivation
|
|
69
|
+
- Multiple rules and constraints
|
|
70
|
+
- Module composition
|
|
71
|
+
|
|
72
|
+
10. **Svelte Counter Example** (`src/examples/svelte-counter/`)
|
|
73
|
+
- Simple counter with increment/decrement
|
|
74
|
+
- Svelte v5 store integration
|
|
75
|
+
- Reactive state updates
|
|
76
|
+
- History tracking
|
|
77
|
+
|
|
78
|
+
### Testing
|
|
79
|
+
|
|
80
|
+
11. **Test Suite** (`src/__tests__/`)
|
|
81
|
+
- Protocol type tests
|
|
82
|
+
- DSL helper tests
|
|
83
|
+
- Engine integration tests
|
|
84
|
+
- 18 tests, all passing
|
|
85
|
+
- Coverage of core functionality
|
|
86
|
+
|
|
87
|
+
### Documentation
|
|
88
|
+
|
|
89
|
+
12. **README.md**
|
|
90
|
+
- Comprehensive introduction
|
|
91
|
+
- Core concepts explanation
|
|
92
|
+
- Quick start guide
|
|
93
|
+
- API reference
|
|
94
|
+
- Future directions
|
|
95
|
+
- Examples and usage patterns
|
|
96
|
+
|
|
97
|
+
13. **Package Configuration**
|
|
98
|
+
- `package.json` - NPM package metadata
|
|
99
|
+
- `tsconfig.json` - TypeScript configuration
|
|
100
|
+
- `vitest.config.ts` - Test configuration
|
|
101
|
+
- `.gitignore` - Git ignore rules
|
|
102
|
+
- `.npmignore` - NPM publish exclusions
|
|
103
|
+
- `LICENSE` - MIT License
|
|
104
|
+
|
|
105
|
+
## Design Principles Implemented
|
|
106
|
+
|
|
107
|
+
✓ **Strong typing and functional programming**
|
|
108
|
+
|
|
109
|
+
- All core types are strongly typed
|
|
110
|
+
- Rules and constraints are pure functions
|
|
111
|
+
- Immutable state updates
|
|
112
|
+
|
|
113
|
+
✓ **Logic-first architecture**
|
|
114
|
+
|
|
115
|
+
- User-facing API expressed in terms of facts, events, rules, constraints
|
|
116
|
+
- FSMs are an internal implementation detail
|
|
117
|
+
|
|
118
|
+
✓ **Language-agnostic core protocol**
|
|
119
|
+
|
|
120
|
+
- JSON-friendly types
|
|
121
|
+
- Pure, deterministic step function
|
|
122
|
+
- Designed for future C#, PowerShell support
|
|
123
|
+
|
|
124
|
+
✓ **Provable, analyzable, testable**
|
|
125
|
+
|
|
126
|
+
- Pure functions easy to test
|
|
127
|
+
- Comprehensive test coverage
|
|
128
|
+
- Type-safe at compile time
|
|
129
|
+
|
|
130
|
+
✓ **Ecosystem integration ready**
|
|
131
|
+
|
|
132
|
+
- Svelte v5 integration implemented
|
|
133
|
+
- PluresDB integration placeholder
|
|
134
|
+
- Extensible actor system
|
|
135
|
+
|
|
136
|
+
## Build and Test Status
|
|
137
|
+
|
|
138
|
+
- ✅ TypeScript compilation succeeds
|
|
139
|
+
- ✅ All 18 tests pass
|
|
140
|
+
- ✅ Type checking passes (strict mode)
|
|
141
|
+
- ✅ Examples run successfully
|
|
142
|
+
- ✅ Ready for npm publish
|
|
143
|
+
|
|
144
|
+
## Next Steps
|
|
145
|
+
|
|
146
|
+
1. Enhance examples to demonstrate more complex flows
|
|
147
|
+
2. Implement PluresDB integration
|
|
148
|
+
3. Add visualization tools (state graphs, rule graphs)
|
|
149
|
+
4. Create ADP static analysis integration
|
|
150
|
+
5. Develop C# and PowerShell bindings
|
|
151
|
+
6. Add property-based testing
|
|
152
|
+
7. Create documentation site
|
|
153
|
+
8. Build code-canvas integration
|
|
154
|
+
|
|
155
|
+
## File Statistics
|
|
156
|
+
|
|
157
|
+
- Total source files: 11
|
|
158
|
+
- Total test files: 3
|
|
159
|
+
- Lines of TypeScript: ~1,500+
|
|
160
|
+
- Examples: 3
|
|
161
|
+
- Integrations: 2
|
|
162
|
+
- Core modules: 4
|
|
163
|
+
|
|
164
|
+
## API Stability
|
|
165
|
+
|
|
166
|
+
The core protocol (`PraxisFact`, `PraxisEvent`, `PraxisState`, `PraxisStepFn`) is designed to be stable and is the foundation for cross-language support. Higher-level TypeScript APIs may evolve but will maintain backward compatibility where possible.
|