|
3 | 3 |
|
4 | 4 | (define state |
5 | 5 | '((metadata |
6 | | - (version "0.3.0") |
| 6 | + (version "0.4.0") |
7 | 7 | (schema-version "1.0") |
8 | 8 | (created "2026-02-05") |
9 | | - (updated "2026-02-13") |
| 9 | + (updated "2026-03-09") |
10 | 10 | (project "stapeln") |
11 | 11 | (repo "hyperpolymath/stapeln")) |
12 | 12 |
|
|
16 | 16 | (tech-stack |
17 | 17 | ((frontend . "ReScript-TEA + Deno") |
18 | 18 | (backend . "Elixir (Phoenix) + Absinthe GraphQL") |
19 | | - (abi . "Idris2 type definitions") |
| 19 | + (abi . "Idris2 formal proofs") |
20 | 20 | (ffi . "Zig shared library + CLI bridge") |
| 21 | + (security-engine . "miniKanren relational reasoning") |
21 | 22 | (runtime-support . "Podman + Docker + nerdctl")))) |
22 | 23 |
|
23 | 24 | (current-position |
24 | | - (phase "Phase 2: Frontend + Backend MVP") |
25 | | - (overall-completion 35) |
| 25 | + (phase "Phase 3: Feature Complete MVP") |
| 26 | + (overall-completion 75) |
26 | 27 | (components |
27 | | - ((frontend-ui . 50) ; 8 views render and navigate, TEA pattern working |
28 | | - (frontend-backend-wiring . 15) ; API client added, SaveStack/LoadStack wired |
| 28 | + ((frontend-ui . 80) ; 8 views render and navigate, TEA wired to backend |
| 29 | + (frontend-backend-wiring . 85) ; ApiClient, SecurityScan, GapAnalysis, Settings all wired |
29 | 30 | (lago-grey-integration . 60) ; Visual designer, import/export functional |
30 | 31 | (drag-drop-canvas . 40) ; TopologyView with SVG drag-and-drop works |
31 | | - (backend-api . 40) ; REST + GraphQL CRUD + validation live |
| 32 | + (backend-api . 80) ; REST + GraphQL CRUD + validation + security + gaps |
32 | 33 | (zig-ffi . 60) ; bridge_cli fully functional, shared lib has real CRUD+validation |
33 | | - (idris2-abi . 20) ; Type definitions only, no proofs |
| 34 | + (idris2-abi . 90) ; 8 genuine proofs, no believe_me, postulates justified |
34 | 35 | (stack-validator . 30) ; Basic MVP checks (empty, duplicates, ports) |
35 | | - (security-inspector . 30) ; UI renders with sample data, no backend calls |
36 | | - (gap-analysis . 30) ; UI renders with sample data, no backend calls |
| 36 | + (security-inspector . 80) ; 558-line real scanner, vulnerability detection, grading |
| 37 | + (gap-analysis . 80) ; 639-line real analyzer, 11 check categories, fix commands |
37 | 38 | (simulation-mode . 35) ; WASM/JS batch packet kernel with backpressure |
38 | 39 | (export-import . 70) ; JSON design + compose file export with real images |
39 | | - (settings . 25) ; Form renders, localStorage save added, no full persistence |
40 | | - (security-reasoning . 0) ; miniKanren not implemented (documentation only) |
41 | | - (firewall-config . 0) ; Not implemented (documentation only) |
42 | | - (database-integration . 0) ; VeriSimDB not connected |
43 | | - (auth . 0) ; No authentication |
| 40 | + (settings . 80) ; Full backend persistence via SettingsStore + SettingsController |
| 41 | + (security-reasoning . 70) ; miniKanren core + security rules + engine API |
| 42 | + (auth . 75) ; JWT auth, register/login, UserStore, RequireApiToken dual-mode |
| 43 | + (firewall-config . 0) ; Not implemented |
| 44 | + (database-integration . 0) ; In-memory GenServer stores (StackStore, UserStore, SettingsStore) |
44 | 45 | (post-quantum . 0) ; Not started |
45 | 46 | (codegen-engine . 10) ; compose.toml/docker-compose export works |
46 | | - (documentation . 80))) ; Extensive but some aspirational content remains |
| 47 | + (documentation . 80))) ; Extensive, some aspirational content remains |
47 | 48 | (working-features |
48 | 49 | ("8-view tabbed UI (Network, Stack, Lago Grey, Ports, Security, Gaps, Simulation, Settings)" |
49 | 50 | "ReScript-TEA architecture (Model, Msg, Update, View) with pure state transitions" |
50 | 51 | "SVG drag-and-drop topology canvas with zoom/pan" |
51 | 52 | "Phoenix REST + GraphQL CRUD for stacks with validation" |
52 | | - "Zig FFI shared library with real CRUD and validation (not stubs)" |
| 53 | + "Zig FFI shared library with real CRUD and validation" |
53 | 54 | "Zig CLI bridge with JSON store persistence" |
54 | 55 | "NativeBridge pattern (try Zig FFI, fallback to Elixir GenServer)" |
55 | | - "In-memory StackStore GenServer with JSON file persistence" |
| 56 | + "In-memory StackStore, UserStore, SettingsStore GenServers with JSON persistence" |
| 57 | + "JWT authentication (register, login, /auth/me)" |
| 58 | + "RequireApiToken plug accepts both static tokens and JWT" |
| 59 | + "SecurityScanner: 558 lines, vulnerability detection, port analysis, grading A+-F" |
| 60 | + "GapAnalyzer: 639 lines, 11 check categories, fix commands, effort estimates" |
| 61 | + "miniKanren security reasoning engine (core, security rules, engine API)" |
| 62 | + "Frontend ApiClient with all endpoint wiring (security, gaps, settings, auth)" |
| 63 | + "Settings persistence via SettingsController + SettingsStore" |
56 | 64 | "Design export to JSON with metadata" |
57 | | - "Compose file export with real container images (not TODO stubs)" |
| 65 | + "Compose file export with real container images" |
58 | 66 | "Design import with validation and round-trip support" |
59 | 67 | "Simulation mode with WASM/JS batch packet stepping" |
60 | | - "SecurityInspector with sample vulnerability data and scoring" |
61 | | - "GapAnalysis with sample gap detection data" |
62 | | - "Settings page with localStorage persistence" |
63 | | - "Frontend-backend API wiring for SaveStack/LoadStack" |
| 68 | + "Idris2 ABI: 8 genuine proofs (injective, distinct, port bounds, round-trip, etc.)" |
64 | 69 | "ARIA labels and accessibility throughout" |
65 | | - "Idris2 ABI type definitions and FFI declarations")) |
| 70 | + "Sx.res style compatibility shim for @rescript/react 0.14")) |
66 | 71 | (not-working |
67 | | - ("RunSecurityScan/RunGapAnalysis buttons call backend but use sample data" |
68 | | - "Settings form values don't propagate back to model" |
69 | | - "No authentication (PAM or otherwise)" |
70 | | - "No database (in-memory only)" |
71 | | - "No miniKanren security engine" |
| 72 | + ("No persistent database (Ecto/PostgreSQL) — GenServer stores only" |
72 | 73 | "No VeriSimDB integration" |
73 | | - "No OWASP ModSecurity" |
74 | 74 | "No ephemeral pinholes" |
75 | 75 | "No post-quantum crypto" |
76 | | - "Idris2 proofs are declarations only (no actual proofs)"))) |
| 76 | + "SecurityScanResult/GapAnalysisResult still use default init state (JSON parsing TODO)"))) |
77 | 77 |
|
78 | 78 | (blockers-and-issues |
79 | | - (critical |
80 | | - ("Frontend-backend data model mismatch (components vs services)")) |
| 79 | + (critical ()) |
81 | 80 | (high |
82 | | - ("SecurityInspector and GapAnalysis operate on hardcoded sample data" |
83 | | - "No persistent database (Ecto/PostgreSQL)" |
84 | | - "No authentication system")) |
| 81 | + ("No persistent database (Ecto/PostgreSQL)" |
| 82 | + "Security/gap scan results not parsed from backend JSON — uses init defaults")) |
85 | 83 | (medium |
86 | | - ("dev-server.ts is TypeScript (should be .js)" |
87 | | - "Old HTML prototypes still in repo" |
88 | | - "Nested .github/workflows in frontend/" |
89 | | - "node_modules tracked for ReScript compilation")) |
| 84 | + ("Deprecation warnings in frontend (Js.Array2.joinWith, Js.Exn.Error)" |
| 85 | + "Simulation mode only 35% complete")) |
90 | 86 | (low |
91 | | - ("Dark mode hardcoded in StackView" |
92 | | - "Old project name 'stackur' referenced in StackView"))) |
| 87 | + ("Dark mode hardcoded in StackView"))) |
93 | 88 |
|
94 | 89 | (critical-next-actions |
95 | 90 | (immediate |
96 | | - ("Connect SecurityInspector to backend validation API" |
97 | | - "Connect GapAnalysis to backend validation API" |
98 | | - "Add Ecto + PostgreSQL for persistent storage" |
99 | | - "Remove old HTML prototypes")) |
| 91 | + ("Parse SecurityScanner/GapAnalyzer JSON responses in Update.res" |
| 92 | + "Add Ecto + PostgreSQL for persistent storage")) |
100 | 93 | (this-week |
101 | | - ("Implement authentication (PAM or JWT)" |
102 | | - "Translate frontend component model to backend service model" |
| 94 | + ("Integrate miniKanren engine into SecurityScanner for enriched findings" |
103 | 95 | "Add WebSocket for real-time validation updates")) |
104 | 96 | (before-release |
105 | | - ("Implement miniKanren security reasoning engine" |
106 | | - "Add Idris2 formal proofs (not just declarations)" |
107 | | - "VeriSimDB integration for audit trails" |
| 97 | + ("VeriSimDB integration for audit trails" |
108 | 98 | "Post-quantum crypto" |
109 | 99 | "Comprehensive security audit"))))) |
0 commit comments