feat(platform): complete the Gelios external data loop

This commit is contained in:
Codex
2026-07-20 20:45:05 +03:00
parent def9a24e0d
commit 8a7465cf0e
66 changed files with 5730 additions and 123 deletions
+22 -14
View File
@@ -48,14 +48,18 @@ read-capability передаёт все entities, которые provider воз
boundary запрещены; сортировка и видимость принадлежат Data Product consumer и
Foundry.
Первый production-shaped package — `providers/gelios/v1`. Он фиксирует реальный
Gelios REST `GET /api/v1/units` transport contract и точный output
`fleet.positions.current.v1@1.0.0` с revision
`ontology.map.moving_object.v1`. Все Data Product fields используют snake_case.
Его optional `tokenLifecycle` точно описывает два provider-issued artifacts —
`access` и `refresh`: request использует `access`, а refresh пока имеет режим
`operator_managed`. Это metadata без secret values и без заявления о
реализованном автоматическом refresh.
Текущий production-shaped package — `providers/gelios/v5`. Он сохраняет два
официальных Gelios REST safe-read: `GET /api/v1/users/me/monitoring-config` и
`GET /api/v1/units?incltrip=true`, а также точный immutable output
`fleet.positions.current.v4@4.0.0` с revision
`ontology.map.moving_object.v3`. Единственные monitoring-state fields —
`signal_state` (`active|inactive`) и `movement_state` (`moving|stopped`),
полученные из Ontology Gelios `v1.1.0`. Все Data Product fields используют
snake_case. `fieldContracts` фиксирует тип и обязательность каждого поля, а
закрытые state values проверяются и в provider mapping, и на каждом publish в
External Data Plane. Native rotating credential использует `access`, а
`refresh` остаётся внутри NDC L2 Credentials. Предыдущие Data Product versions
не переписываются и остаются legacy-compatible.
## Проверяемые v1 contracts
@@ -64,8 +68,11 @@ Gelios REST `GET /api/v1/units` transport contract и точный output
запрещены; publisher представлен system-managed declaration/status без ref.
- `Collection Profile` — явная policy сбора. `manual` не может скрыто содержать
polling interval; `realtime` требует interval не чаще одного раза в секунду.
- `Data Product` — нормализованный versioned output с semantic types, полями и
внутренней аудиторией.
- `Data Product` — нормализованный versioned output с semantic types, полями,
optional `fieldContracts` и внутренней аудиторией. Если `fieldContracts`
задан, он обязан покрывать точный набор fields; каждый contract задаёт
`type`, `required`, optional closed `enum` и числовые bounds. Отсутствие
contracts допустимо только для опубликованных legacy versions.
- `Intake Batch` — canonical **scoped** record, который External Data Plane
валидирует и сохраняет: source, contract revision, idempotency, restricted
raw envelope и canonical facts. Его `source` содержит `providerId`,
@@ -153,10 +160,11 @@ Provider auth и внутренние workload capabilities используют
credential domains. После сохранения ядро владеет secret, а graph и MCP
используют только opaque reference.
Gelios выдаёт ровно access token и refresh token. Текущий credential type
`httpBearerAuth` использует access token для HTTP request. Автоматический обмен
refresh → access в текущем runtime не доказан и поэтому не заявлен: package
фиксирует `refreshMode: operator_managed`. Название credential с текстом вроде
Gelios выдаёт ровно access token и refresh token. Production credential type
`ndcProviderRotatingAccessApi` использует access token для HTTP request и выполняет
refresh → access в native n8n `preAuthentication`; provider package v3 фиксирует
`refreshMode: runtime_managed`. Оба secret artifact остаются в native Credentials и не
попадают в graph, package или trace. Название credential с текстом вроде
`read access` является лишь локальной меткой; read-классификацию задают
разрешённые endpoint/method в capability catalog и workflow policy, а не scope
самого access token. В deployed Engine exact method/path policy ещё не