Skip to content

Commit 89d4cf8

Browse files
committed
Scaffold core and variant structure
1 parent 4dc1ed5 commit 89d4cf8

11 files changed

Lines changed: 319 additions & 24 deletions

File tree

.github/workflows/matrix-ci.yml

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
name: LumenIO Matrix CI
2+
3+
on:
4+
push:
5+
branches: [main, develop]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
core:
11+
name: Core Tests
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: actions/checkout@v4
15+
- uses: actions/setup-python@v4
16+
with:
17+
python-version: '3.11'
18+
- run: |
19+
cd LumenIO/packages/lumenio-core
20+
pip install -e .
21+
pytest tests/
22+
23+
variants:
24+
name: Variant Tests
25+
runs-on: ${{ matrix.os }}
26+
needs: core
27+
strategy:
28+
matrix:
29+
variant: [pc, mobile, pcproj, mobileproj, standalone, wearables]
30+
os: [ubuntu-latest]
31+
include:
32+
- variant: pc
33+
sensors: webcam,keyboard,mouse
34+
e2e: desktop
35+
- variant: mobile
36+
sensors: camera,gyro,touch,accelerometer
37+
e2e: mobile
38+
- variant: pcproj
39+
sensors: webcam,keyboard,mouse,projector
40+
e2e: desktop-projector
41+
- variant: mobileproj
42+
sensors: camera,gyro,touch,accelerometer,projector
43+
e2e: mobile-projector
44+
- variant: standalone
45+
sensors: camera,lidar,projector,compute
46+
e2e: embedded
47+
- variant: wearables
48+
sensors: imu,camera,haptic,display
49+
e2e: wearable
50+
steps:
51+
- uses: actions/checkout@v4
52+
- uses: actions/setup-python@v4
53+
with:
54+
python-version: '3.11'
55+
- name: Install Core
56+
run: |
57+
cd LumenIO/packages/lumenio-core
58+
pip install -e .
59+
- name: Test Variant ${{ matrix.variant }}
60+
run: |
61+
cd LumenIO/packages/lumenio-${{ matrix.variant }}
62+
pip install -e .
63+
pytest tests/unit/
64+
- name: E2E Tests ${{ matrix.variant }}
65+
run: |
66+
cd LumenIO/packages/lumenio-${{ matrix.variant }}
67+
npm install
68+
npx playwright install
69+
npx playwright test --project=${{ matrix.e2e }}
70+
71+
integration:
72+
name: Cross-Variant Integration
73+
runs-on: ubuntu-latest
74+
needs: variants
75+
steps:
76+
- uses: actions/checkout@v4
77+
- run: |
78+
python LumenIO/scripts/validate_contracts.py
79+
python LumenIO/scripts/version_compatibility_check.py

LumenIO/VERSIONING.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# LumenIO Versioning & Release Policy
2+
3+
## Core (LumenIO-Core)
4+
- Semantic Versioning: MAJOR.MINOR.PATCH
5+
- MAJOR: Breaking contract changes
6+
- MINOR: Backward-compatible features
7+
- PATCH: Bug fixes
8+
9+
## Variants
10+
- Depend on Core with ranges like `^0.1.0`
11+
- Version independently
12+
- Must pass Core contract tests
13+
14+
## Release Process
15+
1. Core release
16+
2. Update variant core ranges
17+
3. Matrix CI validates all combinations
18+
4. Integration tests ensure compatibility
19+
20+
## CHANGELOG Format
21+
```
22+
## [Version] - YYYY-MM-DD
23+
### Core
24+
- Added: ...
25+
- Changed: ...
26+
- Fixed: ...
27+
### Variant Updates
28+
- PC: ...
29+
- Mobile: ...
30+
### Breaking Changes
31+
- ...
32+
```
33+
34+
## Compatibility Matrix
35+
| Core | PC | Mobile | PCProj | MobileProj | Standalone | Wearables |
36+
|------|----|--------|--------|------------|------------|-----------|
37+
|0.1.x|||||||

LumenIO/bootstrap.xml

Lines changed: 64 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,60 @@
11
<project>
2-
<name>LumenIO</name>
3-
<description>Gesture-first multi-device programming interface (PC, Mobile, Projector, Standalone, Wearables).</description>
4-
<authors>
5-
<author role="cipher">LLM/NN Prompt Engineer</author>
6-
<author role="forge">Mech/Electrical/Industrial Engineer</author>
7-
</authors>
8-
<repository>https://github.com/testingground/testingground.github.io</repository>
9-
<modules>
10-
<module>hub</module>
11-
<module>clients</module>
12-
<module>adapters</module>
13-
<module>agents</module>
14-
<module>calibration</module>
15-
</modules>
2+
<brand>
3+
<name>LumenIO</name>
4+
<description>Gesture-first multi-device programming interface ecosystem</description>
5+
<repository>https://github.com/testingground/testingground.github.io</repository>
6+
</brand>
7+
<core>
8+
<name>LumenIO-Core</name>
9+
<description>Shared contracts, schemas, gesture FSM, calibration, agents</description>
10+
<version>0.1.0</version>
11+
<modules>
12+
<module>contracts</module>
13+
<module>schemas</module>
14+
<module>gestures</module>
15+
<module>calibration</module>
16+
<module>agents</module>
17+
<module>common</module>
18+
</modules>
19+
</core>
20+
<variants>
21+
<variant>
22+
<name>LumenIO-PC</name>
23+
<target>desktop</target>
24+
<sensors>webcam,keyboard,mouse</sensors>
25+
<core_version>^0.1.0</core_version>
26+
</variant>
27+
<variant>
28+
<name>LumenIO-Mobile</name>
29+
<target>mobile</target>
30+
<sensors>camera,gyro,touch,accelerometer</sensors>
31+
<core_version>^0.1.0</core_version>
32+
</variant>
33+
<variant>
34+
<name>LumenIO-PCProj</name>
35+
<target>desktop+projector</target>
36+
<sensors>webcam,projector,keyboard,mouse</sensors>
37+
<core_version>^0.1.0</core_version>
38+
</variant>
39+
<variant>
40+
<name>LumenIO-MobileProj</name>
41+
<target>mobile+projector</target>
42+
<sensors>camera,projector,gyro,touch,accelerometer</sensors>
43+
<core_version>^0.1.0</core_version>
44+
</variant>
45+
<variant>
46+
<name>LumenIO-Standalone</name>
47+
<target>embedded</target>
48+
<sensors>camera,lidar,projector,compute</sensors>
49+
<core_version>^0.1.0</core_version>
50+
</variant>
51+
<variant>
52+
<name>LumenIO-Wearables</name>
53+
<target>wearable</target>
54+
<sensors>imu,camera,haptic,display</sensors>
55+
<core_version>^0.1.0</core_version>
56+
</variant>
57+
</variants>
1658
<dependencies>
1759
<dep>Python 3.11+</dep>
1860
<dep>FastAPI + aiortc</dep>
@@ -23,18 +65,16 @@
2365
<dep>Node 20</dep>
2466
<dep>Vite/Vitest/Playwright</dep>
2567
</dependencies>
26-
<testing>
27-
<python>pytest httpx jsonschema coverage</python>
28-
<node>vitest playwright coverage</node>
29-
</testing>
30-
<ci>
31-
<service>GitHub Actions</service>
32-
</ci>
68+
<authors>
69+
<author role="cipher">LLM/NN Prompt Engineer</author>
70+
<author role="forge">Mech/Electrical/Industrial Engineer</author>
71+
</authors>
72+
<preferences>
73+
<codex_mode>CODE_FIRST_MINIMAL</codex_mode>
74+
<versioning>semver_core_pinned_variants</versioning>
75+
</preferences>
3376
<handoff>
3477
<directory>LumenIO</directory>
3578
<file>bootstrap.xml</file>
3679
</handoff>
37-
<preferences>
38-
<codex_mode>CODE_FIRST_MINIMAL</codex_mode>
39-
</preferences>
4080
</project>
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
{
2+
"contracts": {
3+
"gesture_fsm": {
4+
"interface": "IGestureFSM",
5+
"methods": [
6+
"register_gesture(pattern: GesturePattern, callback: Callable)",
7+
"process_frame(frame: Frame) -> GestureEvent[]",
8+
"get_state() -> FSMState",
9+
"reset_state() -> None"
10+
],
11+
"events": [
12+
"gesture_detected",
13+
"gesture_started",
14+
"gesture_completed",
15+
"gesture_cancelled"
16+
]
17+
},
18+
"calibration_api": {
19+
"interface": "ICalibration",
20+
"methods": [
21+
"calibrate_device(device_config: DeviceConfig) -> CalibrationResult",
22+
"save_calibration(device_id: str, data: CalibrationData) -> bool",
23+
"load_calibration(device_id: str) -> CalibrationData | None",
24+
"validate_calibration(data: CalibrationData) -> ValidationResult"
25+
]
26+
},
27+
"agent_tools": {
28+
"interface": "IAgentTool",
29+
"signatures": [
30+
"execute(action: ActionSpec, context: ExecutionContext) -> ToolResult",
31+
"validate_input(input: Any) -> ValidationResult",
32+
"get_capabilities() -> CapabilitySet",
33+
"cleanup() -> None"
34+
]
35+
},
36+
"device_adapter": {
37+
"interface": "IDeviceAdapter",
38+
"methods": [
39+
"initialize(config: DeviceConfig) -> bool",
40+
"get_sensor_data() -> SensorData",
41+
"send_output(data: OutputData) -> bool",
42+
"get_capabilities() -> DeviceCapabilities"
43+
]
44+
}
45+
},
46+
"schemas": {
47+
"gesture_pattern": {
48+
"type": "object",
49+
"properties": {
50+
"id": {"type": "string"},
51+
"name": {"type": "string"},
52+
"sequence": {"type": "array", "items": {"$ref": "#/definitions/gesture_keypoint"}},
53+
"tolerance": {"type": "number", "minimum": 0, "maximum": 1},
54+
"min_confidence": {"type": "number", "minimum": 0, "maximum": 1}
55+
},
56+
"required": ["id", "name", "sequence"]
57+
},
58+
"device_config": {
59+
"type": "object",
60+
"properties": {
61+
"device_id": {"type": "string"},
62+
"device_type": {"enum": ["desktop", "mobile", "embedded", "wearable"]},
63+
"sensors": {"type": "array", "items": {"type": "string"}},
64+
"capabilities": {"$ref": "#/definitions/device_capabilities"},
65+
"calibration_data": {"$ref": "#/definitions/calibration_data"}
66+
},
67+
"required": ["device_id", "device_type", "sensors"]
68+
},
69+
"agent_action": {
70+
"type": "object",
71+
"properties": {
72+
"tool": {"type": "string"},
73+
"operation": {"type": "string"},
74+
"parameters": {"type": "object"},
75+
"context": {"$ref": "#/definitions/execution_context"}
76+
},
77+
"required": ["tool", "operation"]
78+
}
79+
}
80+
}

LumenIO/packages/lumenio-mobile/.gitkeep

Whitespace-only changes.

LumenIO/packages/lumenio-mobileproj/.gitkeep

Whitespace-only changes.

LumenIO/packages/lumenio-pc/.gitkeep

Whitespace-only changes.

LumenIO/packages/lumenio-pcproj/.gitkeep

Whitespace-only changes.

LumenIO/packages/lumenio-standalone/.gitkeep

Whitespace-only changes.

LumenIO/packages/lumenio-wearables/.gitkeep

Whitespace-only changes.

0 commit comments

Comments
 (0)