Добавить вторую волну мира Foundations
This commit is contained in:
@@ -217,7 +217,14 @@ Android matrix `52/52` (`551.773 s`). Evidence — `STAGE6_CHALLENGES.md`.
|
||||
spikes, retained pressure Door и toggle ferry имеют solution graphs, collectibles,
|
||||
restart proof и 12/12 production-input playthroughs. Cold unfiltered candidate
|
||||
прошёл Android `57/57` за `1807.264 s`, app JVM `117/117`, content-tool JVM `7/7`.
|
||||
Evidence — `STAGE6_FOUNDATIONS_WAVE1.md`; следующий slice — Levels 23–26.
|
||||
Evidence — `STAGE6_FOUNDATIONS_WAVE1.md`.
|
||||
Второй bounded wave Levels 23–26 также принят: remote saw delivery, frozen step,
|
||||
conductive relay и timed ferry с дальним recovery relay имеют solution graphs,
|
||||
collectibles и 15/15 последовательных production-input playthroughs. Cold
|
||||
unfiltered candidate прошёл Android `62/62` за `1063.114 s`, app JVM `118/118`,
|
||||
content-tool JVM `7/7`; APK содержит все 26 level JSON. Evidence —
|
||||
`STAGE6_FOUNDATIONS_WAVE2.md`; следующий slice — Levels 27–30, включая Foundations
|
||||
challenge и finale.
|
||||
|
||||
### Этап 7. Техническая стабилизация и release engineering — P0, 4–8 дней
|
||||
|
||||
|
||||
@@ -535,6 +535,78 @@ LevelID="foundations.clockwork-step", WorldID="foundations"
|
||||
160 px launch overlap до движения и 20 px far overlap в конечной фазе; bot ждёт
|
||||
реальную поддержку, а не единичное пересечение в воздухе.
|
||||
|
||||
## Уровень 23 — `Remote Volunteer`
|
||||
|
||||
**Статус:** доказан production-input ботом, 3/3 последовательных прохождения.
|
||||
**Ожидаемые и доказанные смерти:** `1`; доставленное тело удерживает Door.
|
||||
|
||||
```text
|
||||
LevelID="foundations.remote-volunteer", WorldID="foundations"
|
||||
→ первый доброволец входит в saw x=600..696 и получает impulse (550,-700)
|
||||
→ тело попадает на raised pressure plate x=1030..1200 и открывает remote-gate
|
||||
→ следующий доброволец стартует прыжок до saw и остаётся жив
|
||||
→ перепрыгивает доставленное тело, забирает cache x=1180
|
||||
→ проходит Door x=1540..1622 и достигает goal с deaths=1, corpses=1
|
||||
```
|
||||
|
||||
**Контракт:** дистанционно доставленное тело является единственным источником
|
||||
pressure-сигнала. Маршрут не маскирует повторную смерть и ограничен максимум одной
|
||||
жертвой на каждом шаге.
|
||||
|
||||
## Уровень 24 — `Frozen Step`
|
||||
|
||||
**Статус:** доказан production-input ботом, 3/3 последовательных прохождения.
|
||||
**Ожидаемые и доказанные смерти:** `1`; одно замороженное тело становится ступенью.
|
||||
|
||||
```text
|
||||
LevelID="foundations.frozen-step", WorldID="foundations"
|
||||
→ первый доброволец замерзает в FREEZER x=720..820
|
||||
→ следующий прыгает и стабилизируется на frozen body на y≈680
|
||||
→ отдельным jump edge поднимается на ledge x=850..1410, y=590
|
||||
→ забирает cache x=1280 и перепрыгивает на ledge x=1500..2200
|
||||
→ достигает верхнего goal с deaths=1, corpses=1
|
||||
```
|
||||
|
||||
**Контракт:** без сохранённого frozen body высота первого уступа недостижима
|
||||
доказанным маршрутом; бот отдельно наблюдает устойчивую опору на теле.
|
||||
|
||||
## Уровень 25 — `Living Wire`
|
||||
|
||||
**Статус:** доказан production-input ботом, 3/3 последовательных прохождения.
|
||||
**Ожидаемые и доказанные смерти:** `1`; проводящее тело постоянно питает Door.
|
||||
|
||||
```text
|
||||
LevelID="foundations.living-wire", WorldID="foundations"
|
||||
→ первый доброволец погибает в ELECTRIC x=720..830
|
||||
→ conductive corpse активирует relayId="living-power" и открывает Door
|
||||
→ следующий стартует прыжок до live relay
|
||||
→ перелетает тело, забирает cache x=1100 на безопасном полу
|
||||
→ проходит Door x=1350..1434 и достигает goal с deaths=1, corpses=1
|
||||
```
|
||||
|
||||
**Контракт:** Door открывается только живым relay-сигналом сохранённого conductive
|
||||
body; каждый шаг fail-fast запрещает вторую смерть.
|
||||
|
||||
## Уровень 26 — `Second Hand`
|
||||
|
||||
**Статус:** доказаны два production-input маршрута, каждый 3/3.
|
||||
**Ожидаемые и доказанные смерти:** `0` для original timer и recovery.
|
||||
|
||||
```text
|
||||
LevelID="foundations.borrowed-time", WorldID="foundations"
|
||||
→ TIMED switch x=760 запускает second-hand на 9 s и outbound ferry
|
||||
→ игрок ждёт boarding phase, садится на platform x=940..1300
|
||||
→ едет до platformX≥1250 и прыгает на far floor x=1580..2700
|
||||
→ intended: проходит Door x=1920 на исходном таймере
|
||||
→ recovery: ждёт закрытия Door и прыгает в высокий relay x=1700,y=650 на 4 s
|
||||
→ оба маршрута поднимаются на ledge x=2230..2700, забирают cache x=2350
|
||||
→ достигают верхнего goal без смерти
|
||||
```
|
||||
|
||||
**Контракт:** recovery relay использует тот же `second-hand`, но расположен над
|
||||
обычным беговым маршрутом. Отдельный тест сначала наблюдает реально закрытую Door,
|
||||
затем её повторное открытие — softlock после истечения исходного таймера исключён.
|
||||
|
||||
## Проверки, следующие из графов
|
||||
|
||||
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=5; releaseTotal=69
|
||||
Validated production content matrix: worlds=4; planned=52; authored=9; releaseTotal=69
|
||||
```
|
||||
|
||||
## Content pipeline и Level DoD
|
||||
@@ -64,29 +64,30 @@ JSON-уровень добавляется только ведущим преф
|
||||
5. restart, blocker-softlock и collectible/challenge проверки;
|
||||
6. camera, sound, art, optimization и QA regression gates из Level DoD.
|
||||
|
||||
Следующий authoring wave — Foundations 19–30. Уровни добавляются небольшими
|
||||
вертикальными срезами; незавершённый уровень не скрывается в общем счётчике
|
||||
production-контента.
|
||||
Foundations 19–26 уже авторизованы через этот pipeline. Следующий bounded slice —
|
||||
Levels 27–30, включая challenge и finale мира; незавершённый уровень не
|
||||
скрывается в общем счётчике production-контента.
|
||||
|
||||
## TDD и gate первого среза
|
||||
## TDD и текущий gate
|
||||
|
||||
RED сначала зафиксировал отсутствующий `ProductionContentMatrix` (15 compile
|
||||
errors), затем отсутствующую CLI-команду `validate-matrix` (exit `2`). После GREEN
|
||||
добавлен отрицательный regression: изменение planned title Level 18 отклоняется
|
||||
как drift реального JSON-префикса.
|
||||
|
||||
Текущий gate после первого Foundations wave на 19 августа 2026 года:
|
||||
Текущий gate после второго Foundations wave на 19 августа 2026 года:
|
||||
|
||||
- `ProductionContentMatrixTest` + `LevelContentToolTest`: `7/7`;
|
||||
- app JVM regression: `117/117`;
|
||||
- `validateLevels`: `22` authored levels;
|
||||
- `validateContentMatrix`: `4` worlds, `52` planned, `5` authored production rows,
|
||||
- app JVM regression: `118/118`;
|
||||
- `validateLevels`: `26` authored levels;
|
||||
- `validateContentMatrix`: `4` worlds, `52` planned, `9` authored production rows,
|
||||
release total `69`;
|
||||
- `lintDebug`, `assembleDebug`, `assembleDebugAndroidTest`: GREEN;
|
||||
- APK ZIP integrity: no errors; matrix и `level-18.json` присутствуют в package;
|
||||
- cold unfiltered Android: `57/57`, `1807.264 s`;
|
||||
- APK ZIP integrity: no errors; `26` level JSON присутствуют в package;
|
||||
- cold unfiltered Android: `62/62`, failures/errors `0/0`, `1063.114 s`;
|
||||
- debug APK SHA-256:
|
||||
`81e50c2b3247a2bf7fad2a2efc461c1d6f19d63e1b10a958e8c1a8544adf48ef`.
|
||||
`67510d404cfa0704500cbf36c7845e9ba9fa05e96630079ab02bc35113e946fa`.
|
||||
|
||||
Матрица не подменяет device evidence: Levels 19–22 прошли отдельные routes,
|
||||
restart DoD и полный unfiltered gate; детали — `STAGE6_FOUNDATIONS_WAVE1.md`.
|
||||
Матрица не подменяет device evidence: Levels 19–26 прошли отдельные routes и
|
||||
полный unfiltered gate; детали — `STAGE6_FOUNDATIONS_WAVE1.md` и
|
||||
`STAGE6_FOUNDATIONS_WAVE2.md`.
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
# Stage 6: Foundations wave 2
|
||||
|
||||
## Принятый результат
|
||||
|
||||
Второй bounded authoring wave расширяет каталог с 22 до 26 уровней:
|
||||
|
||||
- 23 `Remote Volunteer` — saw доставляет одно тело на поднятую pressure plate;
|
||||
- 24 `Frozen Step` — одно frozen body становится обязательной ступенью;
|
||||
- 25 `Living Wire` — одно conductive body постоянно питает relay и Door;
|
||||
- 26 `Second Hand` — timed ferry над PIT и высокий far-side recovery relay.
|
||||
|
||||
Имя Level 26 изменено с дублирующего `Borrowed Time` на уникальное `Second Hand`;
|
||||
stable ID `foundations.borrowed-time` сохранён, поэтому identity и будущие saves
|
||||
не зависят от редактируемого display title.
|
||||
|
||||
Все уровни имеют RU/EN copy, stable LevelID/WorldID, casualty/time targets,
|
||||
collectible и solution graph. Пять Android methods выполняют по три
|
||||
последовательных production-input route: по одному для Levels 23–25 и два для
|
||||
Level 26 — исходный таймер и восстановление после его истечения.
|
||||
|
||||
## TDD и найденные ошибки
|
||||
|
||||
RED сначала зафиксировал каталог `22 != 26`, затем отсутствие
|
||||
`AdvancedFoundationsScenarios`. Device-прогоны обнаружили конкретные ошибки
|
||||
контента и choreography:
|
||||
|
||||
1. Level 23 останавливался перед raised platform (`x=838`); подход к обязательному
|
||||
прыжку перенесён раньше без изменения saw/physics.
|
||||
2. Level 25 проходил ниже слишком высокого cache; cache перенесён на доказанный
|
||||
безопасный ground route.
|
||||
3. Оба маршрута Level 26 падали в PIT около `x=1128`; TIMED switch перенесён к
|
||||
launch zone, а ferry получила достаточный boarding overlap и state-driven
|
||||
launch policy.
|
||||
4. После пересечения PIT Level 26 проходил под cache (`x=2638`); финальный путь
|
||||
разделён на наблюдаемую посадку на верхний ledge и отдельный сбор cache, а
|
||||
ledge сдвинут так, чтобы требовать этот подъём.
|
||||
|
||||
Финальный focused suite прошёл `5/5` methods — `15` route executions за
|
||||
`10.768 s`. Recovery route трижды ждёт `allDoorsOpen=false` на дальней стороне,
|
||||
активирует высокий relay и только затем проходит вновь открытую Door. Retry,
|
||||
teleport и прямая мутация completion отсутствуют.
|
||||
|
||||
## Level DoD evidence
|
||||
|
||||
- JSON validator: `26` levels, format/physics version `1`;
|
||||
- content matrix: `4` worlds, `52` planned, `9` authored production rows,
|
||||
release total `69`;
|
||||
- focused routes: `5/5` methods, `15` playthroughs, `10.768 s`;
|
||||
- app JVM: `118/118`; level-format JVM: `7/7`;
|
||||
- clean `lintDebug`, app APK и AndroidTest APK: GREEN;
|
||||
- final cold unfiltered Android 16: `62/62`, failures/errors `0/0`,
|
||||
instrumentation time `1063.114 s` (`BUILD SUCCESSFUL` in `17m55s`);
|
||||
- APK ZIP: no errors; `26` level JSON packaged;
|
||||
- debug APK SHA-256:
|
||||
`67510d404cfa0704500cbf36c7845e9ba9fa05e96630079ab02bc35113e946fa`.
|
||||
|
||||
Wave не меняет глобальную physics/runtime модель. Следующий bounded slice —
|
||||
Foundations 27–30, включая challenge и finale этого мира.
|
||||
Reference in New Issue
Block a user