Add EveFlutter lifecycle split proof
This commit is contained in:
parent
07a6deb904
commit
8767acedb2
5 changed files with 171 additions and 1 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
56
flutter/eve_parity/eveflutter-lifecycle.json
Normal file
56
flutter/eve_parity/eveflutter-lifecycle.json
Normal 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."
|
||||
]
|
||||
}
|
||||
82
scripts/run-eveflutter-lifecycle-smoke.ps1
Normal file
82
scripts/run-eveflutter-lifecycle-smoke.ps1
Normal 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"
|
||||
|
|
@ -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."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue