diff --git a/.github/workflows/runtime.yml b/.github/workflows/runtime.yml index 9b8226c..98d0fbd 100644 --- a/.github/workflows/runtime.yml +++ b/.github/workflows/runtime.yml @@ -25,8 +25,8 @@ jobs: - name: Analyze run: flutter analyze lib test - - name: Test responsive runtime captures - run: flutter test + - name: Test and generate Linux runtime captures + run: flutter test --update-goldens - name: Verify lifecycle shell: pwsh @@ -35,6 +35,6 @@ jobs: - name: Upload golden captures uses: actions/upload-artifact@v7 with: - name: eveflutter-captures-${{ github.sha }} + name: eveflutter-linux-captures-${{ github.sha }} path: test/goldens/*.png if-no-files-found: error diff --git a/.gitignore b/.gitignore index 8cfaa9e..3820a95 100644 --- a/.gitignore +++ b/.gitignore @@ -32,7 +32,6 @@ migrate_working_dir/ .pub/ /build/ /coverage/ -/assets/ # Symbolication related app.*.symbols diff --git a/README.md b/README.md index 541e3c2..b2f8f71 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,11 @@ Flutter projection, provider selection, command-intent construction, platform build glue, tests, and captures. Providers retain state and command authority; plugins retain domain semantics. -The `eveflutter-v1.0.0` release is owner-built. CI analyzes the runtime, runs +The `eveflutter-v1.0.2` release is owner-built. CI analyzes the runtime, runs the responsive capture suite, verifies lifecycle evidence, and publishes the committed golden captures as a commit-keyed artifact. +Linux CI regenerates Linux goldens rather than byte-comparing them with Windows +captures; widget and contract assertions remain shared across platforms. Current smoke target: diff --git a/assets/current-surface.json b/assets/current-surface.json new file mode 100644 index 0000000..f82c402 --- /dev/null +++ b/assets/current-surface.json @@ -0,0 +1,316 @@ +{ + "providerId": "eve.cultui.inspector", + "providerKind": "eve.composition", + "title": "CultUI Inspector", + "version": 1, + "surface": { + "root": { + "id": "eve.cultui.inspector", + "kind": "surface", + "props": {}, + "children": [ + { + "id": "inspector", + "kind": "partition", + "props": { + "split": "y", + "gap": 6, + "padding": 10 + }, + "children": [ + { + "id": "field-tester", + "kind": "pane", + "props": { + "title": "Aetheric Field Tester", + "padding": 10 + }, + "children": [ + { + "id": "field-list", + "kind": "partition", + "props": { + "split": "y", + "gap": 6 + }, + "children": [ + { + "id": "fov.row", + "kind": "partition", + "props": { + "split": "x", + "gap": 8, + "padding": 4, + "align": "center", + "role": "inspector.row" + }, + "children": [ + { + "id": "fov.label", + "kind": "partition", + "props": { + "size": "12rem", + "role": "inspector.label" + }, + "children": [ + { + "id": "fov.label.text", + "kind": "label", + "props": { + "text": "FOV" + }, + "children": [] + } + ] + }, + { + "id": "fov.field", + "kind": "partition", + "props": { + "size": "1fr", + "role": "inspector.field" + }, + "children": [ + { + "id": "slider.slider.bind.tester.fov.min.0.max.120.step.1.skin", + "kind": "control.slider", + "props": { + "bind": "tester.fov", + "min": 0, + "max": 120, + "step": [ + 1, + "skin", + "inspector.orangeSlider" + ] + }, + "children": [] + } + ] + } + ] + }, + { + "id": "throttle.decay.row", + "kind": "partition", + "props": { + "split": "x", + "gap": 8, + "padding": 4, + "align": "center", + "role": "inspector.row" + }, + "children": [ + { + "id": "throttle.decay.label", + "kind": "partition", + "props": { + "size": "12rem", + "role": "inspector.label" + }, + "children": [ + { + "id": "throttle.decay.label.text", + "kind": "label", + "props": { + "text": "Throttle Decay" + }, + "children": [] + } + ] + }, + { + "id": "throttle.decay.field", + "kind": "partition", + "props": { + "size": "1fr", + "role": "inspector.field" + }, + "children": [ + { + "id": "slider.slider.bind.tester.throttledecay.min.0.max.20.st", + "kind": "control.slider", + "props": { + "bind": "tester.throttleDecay", + "min": 0, + "max": 20, + "step": [ + 0.5, + "skin", + "inspector.orangeSlider" + ] + }, + "children": [] + } + ] + } + ] + }, + { + "id": "flow.speed.row", + "kind": "partition", + "props": { + "split": "x", + "gap": 8, + "padding": 4, + "align": "center", + "role": "inspector.row" + }, + "children": [ + { + "id": "flow.speed.label", + "kind": "partition", + "props": { + "size": "12rem", + "role": "inspector.label" + }, + "children": [ + { + "id": "flow.speed.label.text", + "kind": "label", + "props": { + "text": "Flow Speed" + }, + "children": [] + } + ] + }, + { + "id": "flow.speed.field", + "kind": "partition", + "props": { + "size": "1fr", + "role": "inspector.field" + }, + "children": [ + { + "id": "slider.slider.bind.tester.flowspeed.min.0.max.10.step.0", + "kind": "control.slider", + "props": { + "bind": "tester.flowSpeed", + "min": 0, + "max": 10, + "step": [ + 0.25, + "skin", + "inspector.orangeSlider" + ] + }, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "styles": { + "tokens": { + "colorBackground": "#04070b", + "colorPanel": "#0b1720", + "colorPanelAlt": "#0e2230", + "colorAccent": "#ffcc66", + "colorText": "#eef7ff", + "colorMuted": "#8ba7b8", + "colorLink": "#8efcff" + }, + "controlSkins": { + "inspector.orangeSlider": { + "target": "slider", + "children": [ + { + "id": "box.box.height.18.overflow.visible", + "kind": "control.box", + "props": { + "height": 18, + "overflow": "visible" + }, + "children": [] + }, + { + "id": "part.track.part.track.anchor.center.size.100.6.radius.2.fil", + "kind": "control.part", + "props": { + "name": "track", + "anchor": "center", + "size": [ + "100%", + 6 + ], + "radius": 2, + "fill": "color.panelInset" + }, + "children": [] + }, + { + "id": "part.fill.part.fill.anchor.left.center.size.value.6.radius", + "kind": "control.part", + "props": { + "name": "fill", + "anchor": [ + "left", + "center" + ], + "size": [ + "value%", + 6 + ], + "radius": 2, + "fill": "color.accent" + }, + "children": [] + }, + { + "id": "part.thumb.part.thumb.anchor.value.center.size.12.12.bleed.", + "kind": "control.part", + "props": { + "name": "thumb", + "anchor": [ + "value", + "center" + ], + "size": [ + 12, + 12 + ], + "bleed": 3, + "radius": 7, + "fill": "color.accent", + "shadow": [ + "glow", + "color.accent", + 0.45 + ] + }, + "children": [] + }, + { + "id": "hitArea.hitarea.size.100.22", + "kind": "control.hitArea", + "props": { + "size": [ + "100%", + 22 + ] + }, + "children": [] + } + ] + } + } + } + }, + "commands": [], + "fixtureId": "cultui-inspector", + "values": { + "tester.fov": 38, + "tester.throttleDecay": 5, + "tester.flowSpeed": 2 + } +} diff --git a/assets/fonts/Roboto-Bold.ttf b/assets/fonts/Roboto-Bold.ttf new file mode 100644 index 0000000..d3f01ad Binary files /dev/null and b/assets/fonts/Roboto-Bold.ttf differ diff --git a/assets/fonts/Roboto-Regular.ttf b/assets/fonts/Roboto-Regular.ttf new file mode 100644 index 0000000..2c97eea Binary files /dev/null and b/assets/fonts/Roboto-Regular.ttf differ diff --git a/pubspec.yaml b/pubspec.yaml index a2fe3ea..c30d3fa 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -14,7 +14,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.0+1 +version: 1.0.2+3 environment: sdk: ^3.12.1