Add runtime validation gate and known issues baseline

This commit is contained in:
server
2026-04-14 18:32:25 +02:00
parent 7b193cb7f1
commit ae70796e80
12 changed files with 649 additions and 26 deletions

View File

@@ -47,6 +47,8 @@ delivery gradually, not through a single risky cutover.
- decompression failures
- manifest signature failures
- key mismatch by `key_id`
- runtime smoke against the real client
- scenario gate with known-issues baseline
## Practical migration loop
@@ -55,8 +57,31 @@ delivery gradually, not through a single risky cutover.
3. Verify it.
4. Diff it against the source tree.
5. Boot the client with runtime keys.
6. Validate asset loads in logs and in-game.
7. Move to the next pack group.
6. Run the runtime scenario gate.
7. Validate asset loads in logs and in-game.
8. Move to the next pack group.
Recommended gate command:
```bash
python3 scripts/validate_runtime_gate.py \
--runtime-root /tmp/m2dev-client-runtime-http
```
For release tightening:
```bash
python3 scripts/validate_runtime_gate.py \
--runtime-root /tmp/m2dev-client-runtime-http \
--strict-known-issues
```
The shared baseline lives in:
- `known_issues/runtime_known_issues.json`
This lets the migration fail only on new regressions while still tracking
historical client data problems explicitly.
## Confirmed startup-safe pack group
@@ -170,6 +195,13 @@ effect files and reports 12 concrete missing references:
- `effect/background/turtle_statue_tree_roof_light01.mse` missing `turtle_statue_tree_roof_light01.mde`
- `effect/etc/compete/ready.mse` missing `ready.DDS`
Those current actor and effect findings are also recorded in:
- `known_issues/runtime_known_issues.json`
That file is now the shared runtime baseline used by the validators and the
aggregated release gate.
Recommended next pack groups:
1. remaining startup-adjacent patch packs

View File

@@ -229,3 +229,50 @@ This validator checks text-based effect assets in `Effect`:
- `.msf` `BombEffect`
- `.msf` `AttachFile`
- derived `.mss` sound scripts and their referenced `.wav` files
Runtime release gate:
```bash
python3 scripts/validate_runtime_gate.py \
--runtime-root /tmp/m2dev-client-runtime-http
```
Strict runtime release gate:
```bash
python3 scripts/validate_runtime_gate.py \
--runtime-root /tmp/m2dev-client-runtime-http \
--strict-known-issues
```
The gate runs these validators together:
- `scripts/validate_runtime_scenarios.py`
- `scripts/validate_actor_scenarios.py`
- `scripts/validate_effect_scenarios.py`
By default they load the shared baseline:
- `known_issues/runtime_known_issues.json`
Result semantics:
- `known_issue_ids`: currently accepted historical content issues
- `unexpected_issue_ids`: new issues that fail the gate
- `stale_known_issue_ids`: baseline entries not observed anymore
Default behavior:
- known issues are reported but do not fail the gate
- only unexpected issues fail the gate
Strict behavior:
- unexpected issues fail the gate
- stale known-issue entries also fail the gate
Current baseline on the real runtime:
- `world`: `0`
- `actor`: `5`
- `effect`: `12`