82 lines
5.0 KiB
Markdown
82 lines
5.0 KiB
Markdown
# Спецификация 01: проект Monkey C, манифест, таргеты, сборка
|
||
|
||
Источники: module_reqs разд. 1 (единица 1, решения гейта 1.3 № 2/4),
|
||
Ф-2.8, tech-req ОВ-7, указание владельца 2026-10-19 (мультитаргет).
|
||
Единица 1 + 9 (сборка).
|
||
|
||
## 1. Структура проекта
|
||
|
||
```
|
||
3-app\5-watch\FenixDataField\
|
||
manifest.xml — тип datafield, UUID, minApiVersion, продукты
|
||
monkey.jungle — таргетная матрица (якорь fenix6x)
|
||
resources\
|
||
layouts\layout.xml — параметрический макет (спека 03)
|
||
strings\strings.xml — en (базовая) + ru (ПОДХОД/ОТДЫХ/зоны)
|
||
settings\settings.xml — properties (спека 04)
|
||
source\
|
||
FenixDataField.mc — класс поля: колбэки платформы, связка ядра
|
||
и отрисовки (спека 03 §4)
|
||
SetTracker.mc — ядро (спека 02)
|
||
RestTimer.mc — ядро (спека 02)
|
||
ZoneCalc.mc — ядро (спека 02)
|
||
Vibe.mc — паттерны вибраций + гистерезис (спека 04)
|
||
FieldSettings.mc — чтение/кламп properties (спека 04)
|
||
test\
|
||
ZoneCalcTest.mc — (:test)-функции Toybox.Test (спека 02 §5)
|
||
RestTimerTest.mc
|
||
SetTrackerTest.mc
|
||
bin\ — выход сборки (в .gitignore)
|
||
```
|
||
|
||
## 2. Манифест
|
||
|
||
- **тип** — data field (поле данных штатных активностей; элемент
|
||
типа — по образцу SDK-сэмпла DataField; сверяется при установке
|
||
SDK, шаг 3);
|
||
- **UUID** — `34f470ff-b5d1-4141-ad06-c483fa79a1f8` (сгенерирован
|
||
2026-10-19, неизменен навсегда — идентификатор поля при
|
||
обновлениях);
|
||
- **minApiVersion 2.1.0** — самый низкий API из используемого
|
||
(Toybox.Test; остальное — 1.0.0–1.3.0), поле совместимо и со
|
||
старыми CIQ-устройствами (мультичасовая инфраструктура);
|
||
- **products** — `fenix6x` (якорь 280×280, CIQ ≤ 4.1.7); добавление
|
||
модели = строка продукта + при необходимости свой макет
|
||
(семейство квадратных MIP покрывается параметрическим — правка кода
|
||
не требуется);
|
||
- **permissions** — не запрашиваются: пульс приходит в
|
||
`compute(Activity.Info)`, вибрация — `Attention.vibrate`, сеть
|
||
полю не нужна (Ф-2.7);
|
||
- **языки** — en (базовая) + ru.
|
||
|
||
Отображаемое имя поля — «Феникс» (ru) / «Phoenix» (en): под ним
|
||
поле появляется в списке полей профиля «Силовая».
|
||
|
||
## 3. Сборка (решение 2 гейта 1.3 — toolchain)
|
||
|
||
- Connect IQ SDK (актуальная 9.2) устанавливается агентом в
|
||
`C:\tools\connectiq` по прецеденту m09; JDK 21 уже установлен
|
||
(C:\tools\jdk-21.0.12.1+1);
|
||
- сборка — CLI `monkeyc` по каждому таргету матрицы из
|
||
`monkey.jungle`; выход — `.prg` в `bin\`;
|
||
- тесты — прогон `(:test)`-функций инструментарием SDK (симулятор);
|
||
точную команду фиксирует шаг 3 по установленному SDK (спеки
|
||
фиксируют сами тест-кейсы, не команду);
|
||
- смок в симуляторе — поле добавляется в профиль Strength,
|
||
симулируются пульс/Lap (шаг 3);
|
||
- подпись для устройства — developer-ключ (генерация по инструкции
|
||
Garmin, шаг 3), sideload на Fenix 6X — developer mode + Garmin
|
||
Connect Mobile (инструкция — readme модуля, шаг 4).
|
||
|
||
Критерий готовности единицы: `monkeyc` собирает все таргеты матрицы
|
||
без ошибок; предупреждения — только обоснованно подавленные.
|
||
|
||
## 4. Тесты (готовность сборки)
|
||
|
||
1. Сборка таргета fenix6x проходит без ошибок компиляции/линковки.
|
||
2. `.prg` появляется в `bin\`, размер разумный (< 200 КБ).
|
||
3. Добавление второго таргета в `monkey.jungle` (любая модель
|
||
семейства квадратных MIP) собирается **без правок исходников** —
|
||
проверка мультитаргет-инварианта (инвариант 5) на CI-сборке
|
||
агента.
|