Зафиксировать матрицу четырёх миров
This commit is contained in:
@@ -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 дней
|
||||
|
||||
|
||||
@@ -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 тестами.
|
||||
Reference in New Issue
Block a user