Добавить первую волну мира Physics
This commit is contained in:
@@ -231,6 +231,14 @@ bridge → pressure → toggle/timed ferry → Door имеют solution graphs,
|
||||
`66/66` за `6749.094 s`, app JVM `119/119`, content-tool JVM `7/7`; APK содержит
|
||||
30 level JSON. Evidence — `STAGE6_FOUNDATIONS_WAVE3.md`. Мир Foundations 18–30
|
||||
закрыт; следующий bounded slice — Physics 31–34.
|
||||
Первый Physics wave Levels 31–34 принят: mass-three object удерживает Door,
|
||||
трёхобъектная лестница использует новый детерминированный object/object support,
|
||||
saw-delivery соединён с вертикальным lift, crushed body сохраняется на pressure
|
||||
во время полного crusher cycle. Четыре метода доказали 12/12 production-input
|
||||
routes и restart сдвинутого противовеса. Cold unfiltered candidate прошёл Android
|
||||
`70/70` за `611.991 s`, app JVM `122/122`, content-tool JVM `7/7`; APK содержит
|
||||
34 level JSON. Evidence — `STAGE6_PHYSICS_WAVE1.md`. Следующий bounded slice —
|
||||
Physics 35–38.
|
||||
|
||||
### Этап 7. Техническая стабилизация и release engineering — P0, 4–8 дней
|
||||
|
||||
|
||||
@@ -683,6 +683,78 @@ LevelID="foundations.foundation-final", WorldID="foundations"
|
||||
corpse bridge, pressure, toggle-controlled ferry, timed AND-door и collectible;
|
||||
каждая смерть и реальная опора на moving platform наблюдаются ботом.
|
||||
|
||||
## Уровень 31 — `Weight Class`
|
||||
|
||||
**Статус:** доказан production-input ботом, 3/3 последовательных прохождения;
|
||||
после них restart возвращает сдвинутый объект и Door в исходное состояние.
|
||||
**Ожидаемые и доказанные смерти:** `0`.
|
||||
|
||||
```text
|
||||
LevelID="physics.mass-basics", WorldID="physics"
|
||||
→ игрок толкает COUNTERWEIGHT mass=3 с x=650 на pressure x=940..1190
|
||||
→ requiredMass=3 открывает mass-door без присутствия игрока на плите
|
||||
→ input отпускается, Door остаётся открытой только массой объекта
|
||||
→ игрок перепрыгивает противовес, забирает cache x=1580
|
||||
→ проходит Door x=1370 и достигает goal без смертей
|
||||
→ restart возвращает object x=650,y=780, закрытую Door и чистый input/cache
|
||||
```
|
||||
|
||||
**Контракт:** это первый production-уровень Physics и отдельное обучение
|
||||
`weighted-object`; pressure resolver не различает player/corpse/object по типу.
|
||||
|
||||
## Уровень 32 — `Stack Order`
|
||||
|
||||
**Статус:** доказан production-input ботом, 3/3 последовательных прохождения.
|
||||
**Ожидаемые и доказанные смерти:** `0`.
|
||||
|
||||
```text
|
||||
LevelID="physics.stack-order", WorldID="physics"
|
||||
→ BOX x=650,y=800 поддерживает ROCK x=700,y=720
|
||||
→ ROCK поддерживает ICE_BLOCK x=760,y=640; solver сохраняет обе опоры
|
||||
→ игрок отдельными jump edge поднимается на нижний и верхний объекты
|
||||
→ со стопки прыгает на gallery x=1030,y=600 и забирает cache x=900,y=555
|
||||
→ по верхней галерее достигает goal x=2260,y=490 без смертей
|
||||
```
|
||||
|
||||
**Контракт:** vertical object/object contact выбирает первую пересечённую опору
|
||||
снизу, не телепортирует восходящие или не пересекающиеся объекты и не меняет
|
||||
существующую player physics.
|
||||
|
||||
## Уровень 33 — `Launch Window`
|
||||
|
||||
**Статус:** доказан production-input ботом, 3/3 последовательных прохождения.
|
||||
**Ожидаемые и доказанные смерти:** `1`; saw launch сохраняет одно тело.
|
||||
|
||||
```text
|
||||
LevelID="physics.launch-window", WorldID="physics"
|
||||
→ первый доброволец входит в saw x=600 и получает impulse (700,-420)
|
||||
→ следующий начинает прыжок до saw и отдельным edge очищает доставленное тело
|
||||
→ у нижней фазы садится на lift x=1350,y≈790
|
||||
→ snapshot подтверждает реальную moving-platform support
|
||||
→ едет до y≤430 и прыгает на gallery x=1750,y=500
|
||||
→ забирает cache x=2050 и достигает верхнего goal с deaths=1, corpses=1
|
||||
```
|
||||
|
||||
**Контракт:** уровень сочетает уже обученный saw-launch с вертикальной движущейся
|
||||
опорой; бот наблюдает смерть, доставленное тело, посадку и верхнюю фазу отдельно.
|
||||
|
||||
## Уровень 34 — `Press Cycle`
|
||||
|
||||
**Статус:** доказан production-input ботом, 3/3 последовательных прохождения.
|
||||
**Ожидаемые и доказанные смерти:** `1`; crushed body сохраняется на pressure.
|
||||
|
||||
```text
|
||||
LevelID="physics.crusher-rhythm", WorldID="physics"
|
||||
→ первый доброволец погибает в CRUSHER x=680..850
|
||||
→ crushed body становится низкой retained mass на pressure x=650..880
|
||||
→ следующий наблюдает active и inactive фазы полного 4.5 s цикла
|
||||
→ одним новым jump edge пересекает resting press без второй смерти
|
||||
→ забирает cache x=1320 и достигает goal с deaths=1, corpses=1
|
||||
```
|
||||
|
||||
**Контракт:** pressure фиксирует результат жертвы, а timing остаётся обязательным:
|
||||
каждый шаг fail-fast отклоняет вторую смерть и не перезапускает цикл.
|
||||
|
||||
## Проверки, следующие из графов
|
||||
|
||||
1. Сохранять полный integrated device-regression: intended route принятых уровней по три раза и отдельный recovery route уровня 8.
|
||||
|
||||
@@ -49,7 +49,7 @@ finale не вводят новую механику: они проверяют
|
||||
Android `preBuild` зависит от этого gate. Текущее ожидаемое сообщение:
|
||||
|
||||
```text
|
||||
Validated production content matrix: worlds=4; planned=52; authored=13; releaseTotal=69
|
||||
Validated production content matrix: worlds=4; planned=52; authored=17; releaseTotal=69
|
||||
```
|
||||
|
||||
## Content pipeline и Level DoD
|
||||
@@ -64,9 +64,9 @@ JSON-уровень добавляется только ведущим преф
|
||||
5. restart, blocker-softlock и collectible/challenge проверки;
|
||||
6. camera, sound, art, optimization и QA regression gates из Level DoD.
|
||||
|
||||
Foundations 18–30 полностью авторизованы через этот pipeline. Следующий bounded
|
||||
slice — Physics 31–34; незавершённый уровень не скрывается в общем счётчике
|
||||
production-контента.
|
||||
Foundations 18–30 и Physics 31–34 полностью авторизованы через этот pipeline.
|
||||
Следующий bounded slice — Physics 35–38; незавершённый уровень не скрывается в
|
||||
общем счётчике production-контента.
|
||||
|
||||
## TDD и текущий gate
|
||||
|
||||
@@ -75,19 +75,20 @@ errors), затем отсутствующую CLI-команду `validate-matr
|
||||
добавлен отрицательный regression: изменение planned title Level 18 отклоняется
|
||||
как drift реального JSON-префикса.
|
||||
|
||||
Текущий gate после завершения мира Foundations на 19 августа 2026 года:
|
||||
Текущий gate после первого Physics wave на 19 августа 2026 года:
|
||||
|
||||
- `ProductionContentMatrixTest` + `LevelContentToolTest`: `7/7`;
|
||||
- app JVM regression: `119/119`;
|
||||
- `validateLevels`: `30` authored levels;
|
||||
- `validateContentMatrix`: `4` worlds, `52` planned, `13` authored production rows,
|
||||
- app JVM regression: `122/122`;
|
||||
- `validateLevels`: `34` authored levels;
|
||||
- `validateContentMatrix`: `4` worlds, `52` planned, `17` authored production rows,
|
||||
release total `69`;
|
||||
- `lintDebug`, `assembleDebug`, `assembleDebugAndroidTest`: GREEN;
|
||||
- APK ZIP integrity: no errors; `30` level JSON присутствуют в package;
|
||||
- cold unfiltered Android: `66/66`, failures/errors/skipped `0/0/0`, `6749.094 s`;
|
||||
- APK ZIP integrity: no errors; `34` level JSON присутствуют в package;
|
||||
- cold unfiltered Android: `70/70`, failures/errors/skipped `0/0/0`, `611.991 s`;
|
||||
- debug APK SHA-256:
|
||||
`d47ba3baffcaf3c946b77965472b8eba26e77b535e35d1dd1ca67211950e5315`.
|
||||
`1d608168c5f44bc85aabb7bbe23e8e45cd4bb2b2611d6b5c2af5fa4451c63bd3`.
|
||||
|
||||
Матрица не подменяет device evidence: Foundations 18–30 прошёл отдельные routes
|
||||
и полный unfiltered gate; детали — `STAGE6_FOUNDATIONS_WAVE1.md`,
|
||||
`STAGE6_FOUNDATIONS_WAVE2.md` и `STAGE6_FOUNDATIONS_WAVE3.md`.
|
||||
Матрица не подменяет device evidence: Foundations 18–30 и Physics 31–34 прошли
|
||||
отдельные routes и полный unfiltered gate; детали — `STAGE6_FOUNDATIONS_WAVE1.md`,
|
||||
`STAGE6_FOUNDATIONS_WAVE2.md`, `STAGE6_FOUNDATIONS_WAVE3.md` и
|
||||
`STAGE6_PHYSICS_WAVE1.md`.
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
# Stage 6: Physics wave 1
|
||||
|
||||
## Принятый результат
|
||||
|
||||
Первый bounded authoring wave мира Physics добавляет уровни 31–34:
|
||||
|
||||
- 31 `Weight Class` — COUNTERWEIGHT mass 3 самостоятельно удерживает pressure Door;
|
||||
- 32 `Stack Order` — три authored objects образуют реальную вертикальную опору;
|
||||
- 33 `Launch Window` — одна saw-жертва, доставленное тело и вертикальный lift;
|
||||
- 34 `Press Cycle` — crushed body остаётся на pressure, следующий игрок читает
|
||||
active/rest фазы crusher.
|
||||
|
||||
Все четыре уровня совпадают с executable matrix по stable LevelID/WorldID,
|
||||
RU/EN copy, targets и collectible. Четыре Android methods выполняют по три
|
||||
последовательных production-input route: `12/12`, без retry или прямой мутации.
|
||||
Level 31 после трёх маршрутов дополнительно доказывает restart: объект возвращён
|
||||
в `(650,780)`, Door закрыта, deaths/corpses/cache/input очищены.
|
||||
|
||||
## Object-stacking TDD
|
||||
|
||||
Первый RED был точным compile failure: `PhysicalObjectStackResolver` отсутствовал.
|
||||
Второй RED зафиксировал отсутствующий `PhysicsWaveOneScenarios`. Минимальная GREEN
|
||||
реализация добавляет только vertical object/object contact:
|
||||
|
||||
- falling object выбирает верхнюю первую пересечённую опору;
|
||||
- rising object, объект сбоку и не пересёкший верх опоры не телепортируются;
|
||||
- support обнуляет vertical velocity и публикует grounded state;
|
||||
- player movement, run/jump constants и прежняя geometry не менялись.
|
||||
|
||||
`physicsVersion` остаётся `1`: существующие уровни не авторизуют вертикально
|
||||
пересекающиеся objects, поэтому принятые trace/geometry не меняются; новый контакт
|
||||
активируется только новой stacked geometry Level 32.
|
||||
|
||||
## Device evidence
|
||||
|
||||
- targeted first run: `4/4` methods, `12` routes, `10.003 s`;
|
||||
- targeted rerun после restart-proof: `4/4`, GREEN;
|
||||
- cold unfiltered Android 16: `70/70`, failures/errors/skipped `0/0/0`,
|
||||
instrumentation `611.991 s`, `BUILD SUCCESSFUL in 10m23s`;
|
||||
- app JVM: `122/122`; level-format JVM: `7/7`;
|
||||
- clean `lintDebug`, app APK и AndroidTest APK: GREEN;
|
||||
- validator: `34` levels; matrix `17/52` authored production rows;
|
||||
- APK ZIP: no errors; `34` level JSON packaged;
|
||||
- debug APK SHA-256:
|
||||
`1d608168c5f44bc85aabb7bbe23e8e45cd4bb2b2611d6b5c2af5fa4451c63bd3`.
|
||||
|
||||
Следующий bounded slice — Physics 35–38: moving hazard, returning projectile,
|
||||
blast delivery и moving load.
|
||||
Reference in New Issue
Block a user