VEU.WathBody/1-docs/4-modules/m13-fenix-data-field/api_specs/01-project-manifest.md

82 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Спецификация 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-сборке
агента.