Зафиксировать матрицу четырёх миров

This commit is contained in:
2026-08-19 09:39:41 +03:00
parent 3de8d45039
commit 4869649b47
11 changed files with 582 additions and 3 deletions
+5
View File
@@ -208,6 +208,11 @@ challenge-критерия, optional collectible, накопительные л
progress v1/v2 → v3 и active-session v4 → v5 migration, result UI и обучающий
уровень 18 прошли clean gate `116` app JVM + `2` content-tool JVM и unfiltered
Android matrix `52/52` (`551.773 s`). Evidence — `STAGE6_CHALLENGES.md`.
Следующий content gate зафиксирован исполняемой матрицей: релиз содержит 69
уровней, из них production-диапазон 18–69 разделён на четыре мира по 13 уровней.
Каждый мир содержит 11 MAIN, один CHALLENGE и один FINALE; Gradle `preBuild`
проверяет матрицу и соответствие авторизованного JSON-префикса. Контракт —
`STAGE6_CONTENT_MATRIX.md`; следующий authoring wave — Foundations 19–30.
### Этап 7. Техническая стабилизация и release engineering — P0, 4–8 дней
+92
View File
@@ -0,0 +1,92 @@
# Stage 6: production content matrix
## Принятый объём
Production-релиз зафиксирован на `69` уровнях. Уровни 1–17 сохраняются как
принятый vertical-slice и mechanics workshop; уровни 18–69 образуют четыре
production-мира по 13 уровней:
| Мир | Диапазон | MAIN | CHALLENGE | FINALE |
|---|---:|---:|---:|---:|
| Foundations | 18–30 | 11 | 1 | 1 |
| Physics | 31–43 | 11 | 1 | 1 |
| States | 44–56 | 11 | 1 | 1 |
| Mastery | 57–69 | 11 | 1 | 1 |
В каждом мире challenge идёт предпоследним, finale — последним. Challenge и
finale не вводят новую механику: они проверяют уже обученные комбинации. Level 18
`foundations.threefold-proof` является первым production-слотом и уже принят как
обучение casualty/time/collectible challenges.
## Исполняемый контракт
Источник плана —
`level-format/src/main/resources/content/production-content-matrix.tsv`. Каждая
строка фиксирует:
- последовательный номер, стабильные `worldId` и `levelId`;
- роль `MAIN`, `CHALLENGE` или `FINALE`;
- английское имя и единственную вводимую механику либо `-`;
- полный набор используемых механик;
- casualty/time targets и обязательный collectible.
`ProductionContentMatrix` отклоняет каталог до сборки Android, если:
- уровней не 52, номера не образуют непрерывный диапазон 18–69 или ID повторяются;
- нарушены порядок миров, размер мира или позиции challenge/finale;
- stable LevelID не принадлежит своему world, новая механика не используется
самим teaching-уровнем либо вводится в challenge/finale;
- отсутствует challenge target или collectible;
- уже авторизованный JSON-уровень расходится с планом по ID, world, title,
targets или collectible.
Команда ручной проверки:
```sh
./gradlew :level-format:validateContentMatrix
```
Android `preBuild` зависит от этого gate. Текущее ожидаемое сообщение:
```text
Validated production content matrix: worlds=4; planned=52; authored=1; releaseTotal=69
```
## Content pipeline и Level DoD
Матрица разрешает авторинг, но не принимает greybox автоматически. Каждый новый
JSON-уровень добавляется только ведущим префиксом и проходит:
1. concept и solution graph;
2. greybox с зарегистрированным stable LevelID;
3. JSON validator и matrix-prefix validator;
4. production-input bot без teleport/retry masking;
5. restart, blocker-softlock и collectible/challenge проверки;
6. camera, sound, art, optimization и QA regression gates из Level DoD.
Следующий authoring wave — Foundations 19–30. Уровни добавляются небольшими
вертикальными срезами; незавершённый уровень не скрывается в общем счётчике
production-контента.
## TDD и gate первого среза
RED сначала зафиксировал отсутствующий `ProductionContentMatrix` (15 compile
errors), затем отсутствующую CLI-команду `validate-matrix` (exit `2`). После GREEN
добавлен отрицательный regression: изменение planned title Level 18 отклоняется
как drift реального JSON-префикса.
Чистый gate на 19 августа 2026 года:
- `ProductionContentMatrixTest` + `LevelContentToolTest`: `7/7`;
- app JVM regression: `116/116`;
- `validateLevels`: `18` authored levels;
- `validateContentMatrix`: `4` worlds, `52` planned, `1` authored production row,
release total `69`;
- `lintDebug`, `assembleDebug`, `assembleDebugAndroidTest`: GREEN;
- APK ZIP integrity: no errors; matrix и `level-18.json` присутствуют в package;
- debug APK SHA-256:
`73d9647f7d5456c79e6fcfa828e0524ccdd5cdf4777a3998c51016c38ce2652c`.
Этот срез не меняет runtime, physics или geometry, поэтому device playthrough
матрица остаётся acceptance gate следующего authoring wave, а не подменяется
build-time validator тестами.