Add EveFlutter lifecycle split proof

This commit is contained in:
Meta Vens 2026-07-09 01:28:43 +01:00
commit 8767acedb2
5 changed files with 171 additions and 1 deletions

View file

@ -280,6 +280,14 @@ Exit criteria:
Recently cut:
- EveFlutter now has explicit lifecycle incubation evidence at
`flutter/eve_parity/eveflutter-lifecycle.json` and a smoke runner at
`scripts/run-eveflutter-lifecycle-smoke.ps1`. The smoke validates the
lifecycle document, checks release/test/capture evidence paths, runs Dart
analysis from the bundled SDK, and consumes the exported conformance pack from
inside `flutter/eve_parity`. The split-readiness blocker is now narrower:
tagged release, test runner ownership, and capture runner ownership must move
to `EveFlutter`, rather than pretending the lifecycle shape is still unknown.
- EveFlutter now has a provider-catalog picker primitive. `EveProviderCatalog`
parses conformance-export provider entries, including Sai/Norn/TeX plugin
requirements, and `EveProviderPicker` selects those provider ids without

View file

@ -21,3 +21,16 @@ powershell -ExecutionPolicy Bypass -File .\scripts\capture-flutter-parity.ps1 -T
Linux capture requires running the same harness on a Linux host. The Windows
host must not pretend to be a Linux renderer.
Split lifecycle evidence lives in `eveflutter-lifecycle.json`. From the
repository root, run:
```powershell
powershell -ExecutionPolicy Bypass -File .\scripts\run-eveflutter-lifecycle-smoke.ps1
```
That smoke validates the lifecycle document, checks release/test/capture
evidence paths, runs the Dart analyzer through the bundled Dart SDK, and consumes
the exported conformance pack from inside `flutter/eve_parity`. The document is
incubation evidence only: tagged release, test runner ownership, and capture
runner ownership still graduate to the `EveFlutter` repo.

View file

@ -0,0 +1,56 @@
{
"schema": "gamecult.eve.runtime_lifecycle.v1",
"splitTarget": "EveFlutter",
"ownerRepo": "EveFlutter",
"currentHostRepo": "Eve",
"status": "incubating",
"runtimes": [
"windows-flutter",
"linux-flutter",
"android-flutter"
],
"release": {
"ownerRepo": "EveFlutter",
"status": "incubating-flutter-app",
"evidencePaths": [
"flutter/eve_parity/pubspec.yaml",
"flutter/eve_parity/README.md"
],
"pendingProofs": [
"Tagged EveFlutter release is cut from EveFlutter rather than Eve incubation."
]
},
"test": {
"ownerRepo": "EveFlutter",
"status": "dart-analyze-and-widget-smoke",
"commands": [
"tools/deps/flutter/bin/cache/dart-sdk/bin/dart.exe analyze lib test",
"powershell -ExecutionPolicy Bypass -File scripts/run-eveflutter-conformance-consumer-smoke.ps1"
],
"evidencePaths": [
"flutter/eve_parity/lib/main.dart",
"flutter/eve_parity/test/parity_smoke_test.dart",
"scripts/run-eveflutter-conformance-consumer-smoke.ps1"
],
"pendingProofs": [
"Flutter test runner is owned by EveFlutter rather than Eve incubation."
]
},
"capture": {
"ownerRepo": "EveFlutter",
"status": "windows-linux-android-capture-smokes",
"evidencePaths": [
"scripts/capture-flutter-parity.ps1",
"scripts/capture-linux-flutter-parity.ps1",
"scripts/capture-android-flutter-parity.ps1"
],
"pendingProofs": [
"Flutter capture runners are owned by EveFlutter rather than Eve incubation."
]
},
"remainingSplitBlockers": [
"Tagged EveFlutter release is cut from EveFlutter rather than Eve incubation.",
"Flutter test runner is owned by EveFlutter rather than Eve incubation.",
"Flutter capture runners are owned by EveFlutter rather than Eve incubation."
]
}

View file

@ -0,0 +1,82 @@
param(
[string] $LifecyclePath = "flutter\eve_parity\eveflutter-lifecycle.json",
[switch] $SkipAnalyze
)
$ErrorActionPreference = "Stop"
$projectRoot = Split-Path -Parent $PSScriptRoot
$absoluteLifecyclePath = if ([System.IO.Path]::IsPathRooted($LifecyclePath)) {
$LifecyclePath
} else {
Join-Path $projectRoot $LifecyclePath
}
if (-not (Test-Path $absoluteLifecyclePath)) {
throw "EveFlutter lifecycle document not found: $absoluteLifecyclePath"
}
$lifecycle = Get-Content -LiteralPath $absoluteLifecyclePath -Raw | ConvertFrom-Json
if ($lifecycle.schema -ne "gamecult.eve.runtime_lifecycle.v1") {
throw "Unexpected lifecycle schema: $($lifecycle.schema)"
}
if ($lifecycle.splitTarget -ne "EveFlutter") {
throw "Unexpected split target: $($lifecycle.splitTarget)"
}
if ($lifecycle.ownerRepo -ne "EveFlutter") {
throw "Unexpected owner repo: $($lifecycle.ownerRepo)"
}
if ($lifecycle.currentHostRepo -ne "Eve") {
throw "Unexpected current host repo: $($lifecycle.currentHostRepo)"
}
$expectedRuntimes = @("windows-flutter", "linux-flutter", "android-flutter")
foreach ($runtimeId in $expectedRuntimes) {
if (-not ($lifecycle.runtimes -contains $runtimeId)) {
throw "EveFlutter lifecycle missing runtime: $runtimeId"
}
}
foreach ($stage in @("release", "test", "capture")) {
$stageDocument = $lifecycle.$stage
if ($null -eq $stageDocument) {
throw "EveFlutter lifecycle missing stage: $stage"
}
if ($stageDocument.ownerRepo -ne "EveFlutter") {
throw "EveFlutter lifecycle stage $stage has unexpected owner: $($stageDocument.ownerRepo)"
}
if (-not $stageDocument.status) {
throw "EveFlutter lifecycle stage $stage missing status"
}
foreach ($evidencePath in $stageDocument.evidencePaths) {
$absoluteEvidencePath = Join-Path $projectRoot $evidencePath
if (-not (Test-Path $absoluteEvidencePath)) {
throw "EveFlutter lifecycle stage $stage missing evidence path: $evidencePath"
}
}
}
if (-not $SkipAnalyze) {
$dart = Join-Path $projectRoot "tools\deps\flutter\bin\cache\dart-sdk\bin\dart.exe"
if (-not (Test-Path $dart)) {
throw "Dart SDK not found: $dart"
}
Push-Location (Join-Path $projectRoot "flutter\eve_parity")
try {
& $dart analyze lib test
if ($LASTEXITCODE -ne 0) {
throw "EveFlutter Dart analyzer failed with exit code $LASTEXITCODE"
}
} finally {
Pop-Location
}
}
& (Join-Path $projectRoot "scripts\run-eveflutter-conformance-consumer-smoke.ps1")
if ($LASTEXITCODE -ne 0) {
throw "EveFlutter conformance consumer smoke failed with exit code $LASTEXITCODE"
}
Write-Host "EveFlutter lifecycle smoke passed: $absoluteLifecyclePath"

View file

@ -458,10 +458,21 @@
"tools/conformance/consume-export.mjs",
"tools/parity/run-parity.mjs"
]
},
{
"description": "Flutter lifecycle evidence is declared and smoke-checked for EveFlutter incubation.",
"status": "passed",
"evidencePaths": [
"flutter/eve_parity/eveflutter-lifecycle.json",
"scripts/run-eveflutter-lifecycle-smoke.ps1",
"scripts/capture-flutter-parity.ps1",
"scripts/capture-linux-flutter-parity.ps1",
"scripts/capture-android-flutter-parity.ps1"
]
}
],
"pendingProofs": [
"Flutter build, release, and capture lifecycle can run from EveFlutter."
"Tagged EveFlutter release, test runner, and capture runners are owned by EveFlutter rather than Eve incubation."
]
},
{