@zhuoyuezs/ml-platform 0.2.8 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CI-ARTIFACT.md +2 -2
- package/checksums.json +74 -54
- package/package.json +1 -1
- package/release.json +19 -19
- package/runtime/business-client/README.md +64 -4
- package/runtime/business-client/package-lock.json +2 -2
- package/runtime/business-client/package.json +1 -1
- package/runtime/business-client/src/catalog.js +25 -6
- package/runtime/business-client/src/cli.js +177 -7
- package/runtime/business-client/src/http.js +192 -32
- package/skills/data-source-exploration/SKILL.md +12 -1
- package/skills/data-source-exploration/agents/openai.yaml +2 -2
- package/skills/data-source-exploration/references/data-platform.md +83 -0
- package/skills/feature-management/SKILL.md +29 -11
- package/skills/feature-management/agents/openai.yaml +2 -2
- package/skills/feature-management/references/commands.md +64 -7
- package/skills/feature-management/references/contracts.md +124 -6
- package/skills/feature-management/references/data-platform-mapping.md +104 -0
- package/skills/feature-management/references/operator-authoring.md +116 -8
- package/skills/feature-management/references/platform-capability-guide.md +6 -0
- package/skills/feature-management/references/supervised-datasets.md +13 -0
- package/skills/model-deployment-management/SKILL.md +7 -0
- package/skills/model-deployment-management/references/contracts.md +6 -0
- package/skills/model-deployment-management/references/operations.md +28 -1
- package/skills/model-deployment-management/references/troubleshooting.md +8 -0
- package/skills/model-lifecycle-management/SKILL.md +27 -5
- package/skills/model-lifecycle-management/agents/openai.yaml +2 -2
- package/skills/model-lifecycle-management/references/ablation.md +111 -0
- package/skills/model-lifecycle-management/references/discovery.md +18 -3
- package/skills/model-lifecycle-management/references/evaluation.md +188 -1
- package/skills/model-lifecycle-management/references/experiment-runs.md +59 -0
- package/skills/model-lifecycle-management/references/model-comparison.md +11 -9
- package/skills/model-lifecycle-management/references/packaging.md +46 -0
- package/skills/model-lifecycle-management/references/training-contracts.md +172 -1
- package/skills/model-lifecycle-management/references/training.md +60 -0
- package/skills/prediction-report-management/SKILL.md +43 -8
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: data-source-exploration
|
|
3
|
-
description: Discover platform-configured
|
|
3
|
+
description: Discover platform-configured database objects or published external data-platform Mappings, and run bounded structured or Mapping snapshot reads for local data and feature exploration. Use when an algorithm engineer wants to inspect visible sources, Mapping outputs, time coverage or limited rows before defining governed feature assets. Do not use for free-form SQL, bulk export, asset publication, dataset builds, or model training.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Data Source Exploration
|
|
@@ -10,6 +10,15 @@ never request credentials in chat. The platform exposes managed connections and
|
|
|
10
10
|
objects. Connection credentials are write-only control-plane input and are never returned by the
|
|
11
11
|
platform.
|
|
12
12
|
|
|
13
|
+
## External Data Platform
|
|
14
|
+
|
|
15
|
+
For external published mapping discovery and bounded query/snapshot reads, follow
|
|
16
|
+
[the external data platform reference](references/data-platform.md). This includes the complete
|
|
17
|
+
authorized query-candidate catalog, fixed Mapping revisions, asynchronous query runs and paged
|
|
18
|
+
snapshots. Keep that catalog separate from the direct database connections below; it has its own
|
|
19
|
+
IDs, permissions and query semantics. Use `$feature-management` to bind confirmed outputs to
|
|
20
|
+
Parameters and build features; discovery alone does not publish assets.
|
|
21
|
+
|
|
13
22
|
## Manage Connections
|
|
14
23
|
|
|
15
24
|
Datasource connections are business-owned platform resources, not ConfigMap entries. An operator
|
|
@@ -48,6 +57,8 @@ Before discovery, verify the installed client and server target:
|
|
|
48
57
|
|
|
49
58
|
```bash
|
|
50
59
|
command -v ml-platform
|
|
60
|
+
ml-platform version
|
|
61
|
+
ml-platform show-config
|
|
51
62
|
ml-platform health
|
|
52
63
|
```
|
|
53
64
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "数据源与特征探索"
|
|
3
|
-
short_description: "
|
|
4
|
-
default_prompt: "使用 $data-source-exploration
|
|
3
|
+
short_description: "发现已连接数据源或外部 Mapping,并执行有界查询"
|
|
4
|
+
default_prompt: "使用 $data-source-exploration 发现平台可见库表字段或外部数据平台已发布 Mapping,执行有界查询和快照读取,并整理覆盖率、数据与特征假设。"
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Read Published Mappings From The External Data Platform
|
|
2
|
+
|
|
3
|
+
Use this path when the user requests data owned by the external data platform. The modeling
|
|
4
|
+
server holds its login configuration; agents never need its credentials or database DSNs.
|
|
5
|
+
Discover available options with the installed `ml-platform --help`; an older CLI or unconfigured
|
|
6
|
+
server does not imply permission to fall back to a physical database.
|
|
7
|
+
|
|
8
|
+
1. Run `ml-platform data-platform-status` and `ml-platform list-data-platform-connections`.
|
|
9
|
+
2. Inspect connection metadata and objects with `get-data-platform-connection ID` and
|
|
10
|
+
`list-data-platform-objects ID`. These are catalogs, not a physical-query interface.
|
|
11
|
+
3. Prefer `list-data-platform-query-candidates` for model data discovery. It requires the
|
|
12
|
+
integration account's upstream `query:run` capability and returns its complete authorized,
|
|
13
|
+
published, enabled and ready catalog as `candidates`, `complete: true`, and `total`, without
|
|
14
|
+
reading source data. Inspect business names, domains and output labels, keys, units, roles and
|
|
15
|
+
types; filter this complete set locally. It accepts no paging or filter flags. An empty complete
|
|
16
|
+
set is an honest empty result; domains are presentation metadata, not permission grants.
|
|
17
|
+
For an older upstream that lacks this endpoint, use
|
|
18
|
+
`list-data-platform-mappings --page 1 --page-size 50 [--scope-code CODE]`, follow every page
|
|
19
|
+
using `total`, and inspect `lifecycle.run_readiness`. This catalog alone does not prove query
|
|
20
|
+
authorization. Do not fall back on a permission error or to bypass blocked mappings.
|
|
21
|
+
4. Inspect `get-data-platform-mapping-revision MAPPING_ID REVISION_ID`. Confirm output keys,
|
|
22
|
+
units and time semantics. Preserve `active_revision.mapping_revision_id` for reproducibility.
|
|
23
|
+
Execution rechecks authorization and revision state; discovery does not reserve access.
|
|
24
|
+
5. Write a bounded query JSON in the user's workspace, outside the platform repository:
|
|
25
|
+
|
|
26
|
+
```json
|
|
27
|
+
{
|
|
28
|
+
"mapping": {"mapping_revision_id": "33333333-3333-4333-8333-333333333333"},
|
|
29
|
+
"window_start": "2026-10-01T00:00:00+08:00",
|
|
30
|
+
"window_end": "2026-10-01T01:00:00+08:00",
|
|
31
|
+
"max_rows": 100,
|
|
32
|
+
"execution": "async"
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
6. Submit with `ml-platform query-data-platform query.json`. For async submission, poll
|
|
37
|
+
`get-data-platform-query RUN_ID` until terminal. Read `result.snapshot_id` on success;
|
|
38
|
+
a successful HTTP poll alone does not establish successful execution.
|
|
39
|
+
7. Read `get-data-platform-snapshot SNAPSHOT_ID --offset 0 --limit 100`. Advance offset by the
|
|
40
|
+
returned row count until it reaches `captured_rows`. An empty page before that count is an
|
|
41
|
+
incomplete read, not successful completion. Record run ID,
|
|
42
|
+
snapshot ID, mapping revision, columns and their order,
|
|
43
|
+
window, warnings and `completeness`. Partial or truncated results cannot establish complete
|
|
44
|
+
coverage. An empty result is not evidence that the source has no data outside this window.
|
|
45
|
+
|
|
46
|
+
Do not resubmit uncertain POSTs automatically. Keep the returned run ID; after a timeout or
|
|
47
|
+
connection failure, inspect actual task state in the data platform before another submission.
|
|
48
|
+
For `SOURCE_SCHEMA_DRIFT`, ask the data owner to repair/revalidate the source mapping; never
|
|
49
|
+
bypass that gate with a physical ReadSpec or SQL.
|
|
50
|
+
|
|
51
|
+
For training or realtime inference, hand off confirmed outputs to `$feature-management` and its
|
|
52
|
+
Mapping binding workflow. `bind-data-platform-parameters SPEC_JSON` creates/reuses ordinary immutable
|
|
53
|
+
Parameters; exploration alone does not authorize that write. The adapter accepts single published
|
|
54
|
+
structured, unaggregated series, or SQL ReadSpecs, with no inputs/expressions composition. SQL remains
|
|
55
|
+
executed upstream. Mapping output contracts, coverage and causal semantics still require validation;
|
|
56
|
+
SQL-derived values do not prove historical visibility. Duplicate event times and partial snapshots fail.
|
|
57
|
+
|
|
58
|
+
Use the facade query commands for discovery and inspection. Use the Parameter adapter for dataset
|
|
59
|
+
builds and realtime reads; do not copy snapshot rows into catalogs or commit credentials.
|
|
60
|
+
|
|
61
|
+
## Coverage, Visibility And Failure Evidence
|
|
62
|
+
|
|
63
|
+
Start with a short business-relevant window, then expand within the approved query scope when
|
|
64
|
+
checking history coverage. The query facade accepts `max_rows` up to 10000 and snapshot pages up
|
|
65
|
+
to 1000 rows. If a result is partial or truncated, split the time window rather than using the
|
|
66
|
+
captured subset as a complete dataset. Keep the same fixed revision and inspect every window's
|
|
67
|
+
warnings: source SQL may impose its own historical limit even when the snapshot is marked complete.
|
|
68
|
+
Check the requested time grid, first/last timestamps, missingness, duplicates and values; a small
|
|
69
|
+
successful sample does not prove the larger training window is usable.
|
|
70
|
+
|
|
71
|
+
Query/read timestamps describe when data was retrieved. They do not establish when each source row
|
|
72
|
+
first became available. Record whether the Mapping actually publishes a trustworthy availability
|
|
73
|
+
field, and hand this evidence to `$feature-management`; do not invent it from event time or query
|
|
74
|
+
completion time. Ordinary snapshot exploration can proceed without such a field, while strict
|
|
75
|
+
historical `as_of` correctness remains unproven.
|
|
76
|
+
|
|
77
|
+
Distinguish release/configuration failures from empty data. A missing CLI command requires checking
|
|
78
|
+
the installed release; a missing route requires checking the deployed API. A `503` with
|
|
79
|
+
`DATA_PLATFORM_NOT_CONFIGURED` means the server lacks integration configuration. Permission or
|
|
80
|
+
schema-drift failures need resolution in the upstream account/Mapping. Timeouts and disconnected
|
|
81
|
+
POSTs leave submission uncertain; inspect run state before retrying. API health alone does not prove
|
|
82
|
+
upstream authentication or dataset-build Worker support. Report the failed checkpoint and target
|
|
83
|
+
without exposing passwords, cookies, CSRF tokens or Secret contents.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: feature-management
|
|
3
|
-
description: Manage projects, versioned business feature assets and their lifecycle, dataset rowsets and endpoint eligibility, and causal realtime row or sequence-context reads through the deployed ML Platform API using the ml-platform CLI installed with the same release. Use when a business user asks an agent to manage an empty Project, define or change Parameter source contracts, author/package/register an Operator wheel, define single-column Features, order a FeatureSet, create a DatasetManifest or catalog, inspect references, soft-delete or restore a Parameter/Feature/FeatureSet version, configure training/validation/test rowsets or abnormal-data endpoint exclusion, configure realtime freshness policy, run catalog dry-run/apply, build a dataset, fetch inference data, or inspect an artifact without downloading the platform source repository. Do not use for model training, Operator/Dataset deletion, image builds, or Kubernetes deployment.
|
|
3
|
+
description: Manage projects, versioned business feature assets and their lifecycle, dataset rowsets and endpoint eligibility, and causal realtime row or sequence-context reads through the deployed ML Platform API using the ml-platform CLI installed with the same release. Use when a business user asks an agent to manage an empty Project, define or change Parameter source contracts, bind published external data-platform Mapping outputs to Parameters, author/package/register an Operator wheel, define single-column Features, order a FeatureSet, create a DatasetManifest or catalog, inspect references, soft-delete or restore a Parameter/Feature/FeatureSet version, configure training/validation/test rowsets or abnormal-data endpoint exclusion, configure realtime freshness policy, run catalog dry-run/apply, build a dataset, fetch inference data, or inspect an artifact without downloading the platform source repository. Do not use for model training, Operator/Dataset deletion, image builds, or Kubernetes deployment.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Feature Management
|
|
@@ -52,7 +52,8 @@ Keep these evidence rules active in every workflow:
|
|
|
52
52
|
4. Read [references/operator-authoring.md](references/operator-authoring.md) whenever creating or changing Operator code or a wheel.
|
|
53
53
|
5. Read [references/commands.md](references/commands.md) immediately before a platform CLI action: discovery, validation, publication, build, realtime fetch, or artifact download. A local-only draft that is forbidden to call the CLI does not need this reference.
|
|
54
54
|
6. Use [assets/catalog-template](assets/catalog-template) as a copyable starting point for a new end-to-end catalog. Rename every `example_*` identifier and update every referenced path before validation.
|
|
55
|
-
7. Read [references/platform-
|
|
55
|
+
7. Read [references/data-platform-mapping.md](references/data-platform-mapping.md) when binding published external data-platform Mapping outputs to Parameters.
|
|
56
|
+
8. Read [references/platform-capability-guide.md](references/platform-capability-guide.md) only when selecting an asset type or explaining a platform capability. Do not load it merely to write a confirmed local draft; it is never evidence for unresolved business semantics.
|
|
56
57
|
|
|
57
58
|
## Initialize The Client
|
|
58
59
|
|
|
@@ -82,8 +83,9 @@ Use the global `--profile server` form shown above, before the business
|
|
|
82
83
|
command. Do not append `--profile` after a business command. Before discovery,
|
|
83
84
|
check the installed release with `ml-platform --help` and the relevant
|
|
84
85
|
subcommand's `--help`; CLI releases may differ in supported flags. In the
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
current CLI release line (`@zhuoyuezs/ml-platform` 0.8.x; confirm with
|
|
87
|
+
`ml-platform version`), registry `list-*` commands emit JSON by default and
|
|
88
|
+
reject an unknown `--json` flag.
|
|
87
89
|
|
|
88
90
|
If the installed release rejects the global `--profile server` form shown above,
|
|
89
91
|
record the CLI syntax error and inspect `show-config`/subcommand help before
|
|
@@ -109,14 +111,18 @@ Confirm:
|
|
|
109
111
|
- the target project (namespace) for the assets; use the built-in `default` only when the user has no dedicated project. After the target is confirmed, write its explicit `project` field in every Parameter, Operator, Feature, FeatureSet and DatasetManifest draft; never rely on the schema default. Reads and filters use the `--project` command option;
|
|
110
112
|
- business meaning, stable asset names, owner, and intended consumers;
|
|
111
113
|
- Parameter source adapter (`postgresql_direct`, `mysql_direct`,
|
|
112
|
-
`sqlserver_direct`, or `
|
|
114
|
+
`sqlserver_direct`, `influxdb_direct`, or `data_platform_mapping`) and credential-free
|
|
115
|
+
source mapping; for external Mappings, confirm the published revision and output keys;
|
|
113
116
|
- feature formula, exact Parameter dependencies, windows, inclusion rules, rounding, null behavior, and output dtype;
|
|
114
117
|
- whether an approved Operator already implements the formula;
|
|
115
118
|
- FeatureSet column order;
|
|
116
119
|
- dataset mode, read policy, time range, grid, prediction horizon/cutoff contract, and explicit Parameter outputs;
|
|
117
120
|
- named training/validation/test rowsets, abnormal windows, endpoint-policy scope,
|
|
118
121
|
and the model context lookback used to decide endpoint eligibility;
|
|
119
|
-
- realtime freshness and missing-input policy when serving inference data
|
|
122
|
+
- realtime freshness and missing-input policy when serving inference data,
|
|
123
|
+
chosen per model and per Parameter from the data owner's answers on
|
|
124
|
+
timestamp meaning, arrival schedule and ingestion-time columns (see the
|
|
125
|
+
realtime policy questions in [references/contracts.md](references/contracts.md));
|
|
120
126
|
- target profile/API and whether the user authorizes publish and/or build actions.
|
|
121
127
|
|
|
122
128
|
Separate preparation from mutation. Creating files and running local tests or `apply --dry-run` does not authorize publishing a wheel, changing the Registry, or submitting a build Job.
|
|
@@ -260,7 +266,13 @@ unit, time/availability semantics and missing policy in the semantic review.
|
|
|
260
266
|
Never infer a source table, column, measurement, tag, unit or timezone from a
|
|
261
267
|
Parameter name.
|
|
262
268
|
|
|
263
|
-
Create one stable, versioned source contract for each independently readable value. Keep credentials out of JSON.
|
|
269
|
+
Create one stable, versioned source contract for each independently readable value. Keep credentials out of JSON. Direct database sources use `postgresql_direct`, `mysql_direct`, `sqlserver_direct`, or `influxdb_direct` and explicit source identity. For PostgreSQL, keep `source.adapter=postgresql_direct` and put the configured alias in `source.connection_id` (for example `postgresql_bf_monitoring`); never put the connection alias in `source.adapter`. The server supplies database DSNs from managed Secrets; never add them to CLI arguments or Catalog JSON. A missing `connection_id` on a historical PostgreSQL Parameter uses the compatibility default `postgresql`. Put source data validity in `quality_rules`; put dataset-specific transformations in preprocess Operators.
|
|
270
|
+
|
|
271
|
+
For an approved external Mapping, use `bind-data-platform-parameters` to create or reuse
|
|
272
|
+
`data_platform_mapping` Parameters and retain the returned Feature input references. Follow
|
|
273
|
+
[the Mapping reference](references/data-platform-mapping.md) for revision pinning, visibility,
|
|
274
|
+
read budgets and Worker acceptance. The Mapping owns its database connection and SQL; do not
|
|
275
|
+
copy them into the Parameter or add a second public binding resource.
|
|
264
276
|
|
|
265
277
|
When historical and live systems expose the same value, keep one Parameter and add an optional
|
|
266
278
|
`online_source`. Batch/as-of reads always use `source`; realtime causal reads use `online_source`
|
|
@@ -380,9 +392,15 @@ for the cutoff formula, half-open overlap boundaries, scope behavior, and
|
|
|
380
392
|
|
|
381
393
|
For realtime inference, declare `realtime_fetch` only when its effective policy
|
|
382
394
|
must be part of the contract; leaving it unset preserves existing manifest
|
|
383
|
-
hashes.
|
|
384
|
-
|
|
385
|
-
|
|
395
|
+
hashes. The environment defaults are strict and suit short-horizon
|
|
396
|
+
forecasting; for a new model whose Features are served online, choose the
|
|
397
|
+
policy deliberately and declare every field it relies on. Keep
|
|
398
|
+
`allow_missing=false` unless the user explicitly accepts missing required
|
|
399
|
+
inputs. Read [references/contracts.md](references/contracts.md) for the
|
|
400
|
+
freshness, tail-edge, gap-fill, and rowset contracts and the policy method.
|
|
401
|
+
An Operator served online, especially one that aggregates a whole period,
|
|
402
|
+
must follow the Online Period Aggregates method in
|
|
403
|
+
[references/operator-authoring.md](references/operator-authoring.md).
|
|
386
404
|
|
|
387
405
|
## Validate Before Publishing
|
|
388
406
|
|
|
@@ -405,7 +423,7 @@ Stop on any error. Do not weaken schema validation, fabricate a missing dependen
|
|
|
405
423
|
|
|
406
424
|
Publish only after the user explicitly approves Registry and wheel changes. Use catalog `apply` so publication follows Parameter -> Operator -> Feature -> FeatureSet -> Dataset order.
|
|
407
425
|
|
|
408
|
-
After publication, resolve every new DatasetManifest and compare its exact Parameter, Operator, Feature, and FeatureSet versions with the pre-publication mapping. Stop if an affected old key or any unexpected version remains. Resolve the manifest before building. Submit a build only when requested. Before choosing partition controls, use the build command's read-only `--plan` capability described in [commands.md](references/commands.md), inspect its estimates and warnings, and prefer platform automatic sizing over a copied daily example. Explicit overrides need source/resource evidence; preserve the submitted Job's concrete plan when resuming. For the current partitioned materialization runtime, use `--max-parallelism 1` unless a separately verified platform capability says otherwise
|
|
426
|
+
After publication, resolve every new DatasetManifest and compare its exact Parameter, Operator, Feature, and FeatureSet versions with the pre-publication mapping. Stop if an affected old key or any unexpected version remains. Resolve the manifest before building. Submit a build only when requested. Before choosing partition controls, use the build command's read-only `--plan` capability described in [commands.md](references/commands.md), inspect its estimates and warnings, and prefer platform automatic sizing over a copied daily example. Explicit overrides need source/resource evidence; preserve the submitted Job's concrete plan when resuming. For the current partitioned materialization runtime, use `--max-parallelism 1` unless a separately verified platform capability says otherwise. If any selected Operator needs the complete requested window (for example full-window interpolation or smoothing), build with `--partition-duration none --max-parallelism 1` and confirm an unpartitioned `--plan` first, because the CLI default is `auto`; do not retry or resubmit a failed Job until its error and already-completed partitions are understood. For server builds, wait for the terminal Job state and download the exact artifact by `dataset_id + manifest_hash`.
|
|
409
427
|
|
|
410
428
|
Do not delete versioned Registry assets, cancel Jobs, rebuild images, modify Kubernetes, or change service configuration as part of this workflow unless the user separately and explicitly requests that action. An empty Project may be soft-deleted only on an explicit request; rely on the server to reject deletion when resources still exist.
|
|
411
429
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "特征与实时取数管理"
|
|
3
|
-
short_description: "
|
|
4
|
-
default_prompt: "Use $feature-management to manage versioned feature assets, build datasets, or fetch
|
|
3
|
+
short_description: "绑定外部 Mapping,管理特征、数据集与实时推理取数"
|
|
4
|
+
default_prompt: "Use $feature-management to bind published external Mapping outputs to Parameters, manage versioned feature assets, build datasets, or fetch causal realtime inference data through the platform API."
|
|
@@ -51,8 +51,9 @@ ml-platform --profile server list-datasets -q <stable-dataset-id>
|
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
Run each command separately. Check `ml-platform --help` and the specific
|
|
54
|
-
subcommand help before adding flags. In the
|
|
55
|
-
|
|
54
|
+
subcommand help before adding flags. In the current CLI release line
|
|
55
|
+
(`@zhuoyuezs/ml-platform` 0.8.x; confirm with `ml-platform version`), `list-*`
|
|
56
|
+
commands print JSON by default and reject an unknown `--json` flag.
|
|
56
57
|
If a deployed release rejects the global `--profile server` prefix, treat that
|
|
57
58
|
as CLI compatibility drift: record the syntax error, inspect `show-config` and
|
|
58
59
|
the subcommand help, then retry the same read-only command without the rejected
|
|
@@ -107,8 +108,8 @@ empty project. Project commands are server-only and do not modify local storage.
|
|
|
107
108
|
- `apply --project <project>` scopes the comparison snapshot the catalog is
|
|
108
109
|
validated against (omit to compare against `default`);
|
|
109
110
|
- `list-* --project <project>` filters discovery to that project;
|
|
110
|
-
- `get-dataset-artifact` / `download-dataset-artifact` take
|
|
111
|
-
|
|
111
|
+
- `get-dataset-artifact` / `download-dataset-artifact` take `--project <project>`
|
|
112
|
+
(defaults to `default`).
|
|
112
113
|
|
|
113
114
|
Before choosing names, discover within the target project: identical names in a
|
|
114
115
|
different project are unrelated and must not be reused across projects to mean the
|
|
@@ -247,6 +248,25 @@ sizing is not a resource guarantee. Final merge memory is not bounded by a
|
|
|
247
248
|
partition's estimated rows. A long prediction horizon is not itself a reason to
|
|
248
249
|
use daily partitions: inspect the reported source read amplification.
|
|
249
250
|
|
|
251
|
+
Partitioned execution gives each partition only its declared
|
|
252
|
+
`history_requirements` lookback and label overlap. An Operator whose result for
|
|
253
|
+
one row depends on the complete requested window (for example full-window
|
|
254
|
+
interpolation, smoothing, normalization or ranking) is not partition-invariant,
|
|
255
|
+
and no Operator field tells the planner so. Build such a manifest with
|
|
256
|
+
`--partition-duration none --max-parallelism 1`, because both build commands
|
|
257
|
+
default to `auto`. First run the same command with `--plan` and confirm
|
|
258
|
+
`execution_spec.partition_duration` is `null`, `estimated_partition_count` is
|
|
259
|
+
`1`, and the reasons report unpartitioned execution; then submit with the same
|
|
260
|
+
flags. Prefer reformulating the Operator as a causal, bounded-lookback
|
|
261
|
+
calculation when the business rule allows it.
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
ml-platform --profile server \
|
|
265
|
+
build-registered-dataset <dataset_id> <dataset_version> \
|
|
266
|
+
--project <project> \
|
|
267
|
+
--partition-duration none --max-parallelism 1 --plan
|
|
268
|
+
```
|
|
269
|
+
|
|
250
270
|
`--partition-duration` is an execution control and does not change the
|
|
251
271
|
DatasetManifest hash. The current implementation is sequential, so keep
|
|
252
272
|
`--max-parallelism 1`. Completed partitions are checkpointed and resumed by
|
|
@@ -255,8 +275,12 @@ resolved partition duration. Changing it requires a new execution, rather than
|
|
|
255
275
|
reusing old checkpoint boundaries. Changing partition size does not authorize
|
|
256
276
|
cancelling or resubmitting an already-running Job.
|
|
257
277
|
|
|
258
|
-
Record the returned `job_id`, `dataset_id`, and
|
|
259
|
-
also retain `registered_manifest_hash` for FeatureRetrievalSpec binding.
|
|
278
|
+
Record the returned `job_id`, `dataset_id`, and the artifact manifest hash; for a registered Dataset
|
|
279
|
+
also retain `registered_manifest_hash` for FeatureRetrievalSpec binding. A succeeded
|
|
280
|
+
`--wait` or `wait-job` result carries `artifact.manifest_hash`, the DatasetArtifact key used by
|
|
281
|
+
`get-dataset-artifact`, `download-dataset-artifact` and training/evaluation dataset bindings. The
|
|
282
|
+
Job's top-level `manifest_hash` identifies the submitted manifest; it is not an artifact key and
|
|
283
|
+
returns `artifact_not_found` there. If a separate wait is needed:
|
|
260
284
|
|
|
261
285
|
```bash
|
|
262
286
|
ml-platform --profile server wait-job <job_id>
|
|
@@ -294,6 +318,23 @@ write parquet, or publish a DatasetArtifact. Treat HTTP `503` as retryable sourc
|
|
|
294
318
|
freshness/missing-data failure and HTTP `400` as a contract error that requires a
|
|
295
319
|
manifest or request change.
|
|
296
320
|
|
|
321
|
+
Before choosing `realtime_fetch` lag budgets or a schedule time, observe how far
|
|
322
|
+
each Parameter's source has arrived:
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
ml-platform --profile server get-parameter-freshness <name> <version> \
|
|
326
|
+
--project <project> [--lookback 7d] [--end 2026-10-28T00:30:00+08:00] [--online]
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
It reads `[end - lookback, end]` (end inclusive, `lookback` at most `31d`) through
|
|
330
|
+
the Parameter's source adapter without cache, build, or artifact, and returns
|
|
331
|
+
`latest_event_time`, `lag_hours` (the value a realtime read compares with its lag
|
|
332
|
+
budget at that cutoff), `latest_value_event_time`, `missing_trailing_points`,
|
|
333
|
+
`available_at_watermark`/`ingested_at_watermark` when the Parameter declares
|
|
334
|
+
availability, and `source_field_checks`. `--online` reads `online_source` when
|
|
335
|
+
declared. Run it at the intended schedule time on several days; one reading does
|
|
336
|
+
not establish a publication pattern.
|
|
337
|
+
|
|
297
338
|
For a deployment-bound row or full sequence context, prepare one JSON object
|
|
298
339
|
containing `feature_retrieval`, `cutoff_time`, and `entity_keys`, then run:
|
|
299
340
|
|
|
@@ -359,7 +400,9 @@ ml-platform --profile server \
|
|
|
359
400
|
```
|
|
360
401
|
|
|
361
402
|
`--project` defaults to `default`; pass the owning project when the dataset lives
|
|
362
|
-
elsewhere, or the lookup returns `artifact_not_found`.
|
|
403
|
+
elsewhere, or the lookup returns `artifact_not_found`. `<manifest_hash>` is the
|
|
404
|
+
artifact manifest hash (`list-dataset-artifacts`, or `artifact.manifest_hash`
|
|
405
|
+
from a succeeded build wait), not the registered manifest hash.
|
|
363
406
|
|
|
364
407
|
The download command writes progress to stderr after response headers arrive.
|
|
365
408
|
Interpret a timeout with no progress line as a request/header or first-byte
|
|
@@ -393,3 +436,17 @@ Use a structured Parquet reader for schema, row count, column order, and missing
|
|
|
393
436
|
- Do not claim a successful publication from `--dry-run` output.
|
|
394
437
|
- Do not claim Chronon compile/backfill from a successful first-phase Operator build.
|
|
395
438
|
- Do not use `build-dataset` to serve a single realtime inference cutoff.
|
|
439
|
+
|
|
440
|
+
## Bind Published Data Platform Outputs
|
|
441
|
+
|
|
442
|
+
When source semantics and publication are confirmed, use the existing external Mapping directly.
|
|
443
|
+
This creates ordinary immutable Parameters; it does not publish Mapping assets or execute a dataset
|
|
444
|
+
build:
|
|
445
|
+
|
|
446
|
+
```bash
|
|
447
|
+
ml-platform bind-data-platform-parameters --help
|
|
448
|
+
ml-platform bind-data-platform-parameters binding.json
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
See [data-platform-mapping.md](data-platform-mapping.md) for the request, returned Feature input
|
|
452
|
+
references, visibility requirements, Worker requirements and acceptance checks.
|
|
@@ -139,6 +139,17 @@ supported field.
|
|
|
139
139
|
当前严格 `as_of` 只接受 `exact` 或有合同支撑的 `upper_bound`;修改这些语义需要发布
|
|
140
140
|
新的 Parameter 业务版本。
|
|
141
141
|
|
|
142
|
+
`time_semantics.ingested_at_field` 和 `event_time_field` 只是标签:读取时不会查询它们,
|
|
143
|
+
除非 `availability.field` 指向同一列。没有 `availability` 时,读取既没有
|
|
144
|
+
`ingested_at`/`available_at` 证据,严格可见性读取(`as_of` 回放、
|
|
145
|
+
`availability_boundary=cutoff_time`)也会拒绝该 Parameter。只把源表真实存在的入库列写进
|
|
146
|
+
`availability`;源表没有入库时间时,保持 `availability` 为空或使用经数据 owner 确认的
|
|
147
|
+
`fixed_delay`,不要声明不存在的列。发布新 Parameter 时,若 `source.connection_id` 是平台
|
|
148
|
+
托管连接,平台会检查实际查询的列(`time_column`、`value_column`、metric/unit 列、
|
|
149
|
+
`filters` 键、`availability.field`、`availability.revision_id_field`):缺列直接拒绝
|
|
150
|
+
(`source_fields_missing`),不存在的 `ingested_at_field`/`event_time_field` 只作为警告
|
|
151
|
+
返回在 `source_field_checks` 中。已发布版本可用 `get-parameter-freshness` 查看同一检查。
|
|
152
|
+
|
|
142
153
|
未来预报、排程、日历等 known-future 数据允许 `available_at < event_time`。这不是时钟错误:
|
|
143
154
|
`event_time` 是未来目标时刻,`available_at` 是该修订何时已可读取。模型
|
|
144
155
|
`feature_lookup` 会读取 cutoff 后的未来事件窗口,但仍严格过滤
|
|
@@ -380,8 +391,14 @@ Current schema rules:
|
|
|
380
391
|
- Use `parameters` only to request explicit Parameter output columns.
|
|
381
392
|
- Declare one dataset-wide `prediction` contract for forecast Features. `horizon`
|
|
382
393
|
accepts non-negative whole-minute durations such as `0min`, `10min`, or `2h`.
|
|
383
|
-
|
|
384
|
-
|
|
394
|
+
For Operator inputs, each materialized row's `event_time` is its causal
|
|
395
|
+
feature cutoff (`context.cutoff_times` equals `context.target_times`), and the
|
|
396
|
+
horizon sets `label_time = event_time + horizon` without moving those reads.
|
|
397
|
+
`endpoint_policy` eligibility is separate and uses the `cutoff = t - h` rule
|
|
398
|
+
documented in its section. The platform records this in resolved
|
|
399
|
+
lineage (`prediction_time_semantics: event_time_is_causal_cutoff`,
|
|
400
|
+
`label_time_derivation: prediction_time_plus_horizon`); it is not a
|
|
401
|
+
user-configurable policy.
|
|
385
402
|
|
|
386
403
|
### Optional sections
|
|
387
404
|
|
|
@@ -442,11 +459,14 @@ attempts, rows, and elapsed time land in
|
|
|
442
459
|
```json
|
|
443
460
|
"realtime_fetch": {
|
|
444
461
|
"max_workers": 4,
|
|
462
|
+
"deadline_seconds": 30.0,
|
|
463
|
+
"chunk_days": null,
|
|
445
464
|
"min_lookback": "1h",
|
|
446
465
|
"validate_freshness": true,
|
|
447
466
|
"max_source_lag_hours": 3.0,
|
|
448
467
|
"max_source_lag_hours_by_parameter": {},
|
|
449
468
|
"allow_missing": false,
|
|
469
|
+
"allow_missing_by_parameter": {},
|
|
450
470
|
"allow_tail_edge_missing": true,
|
|
451
471
|
"max_tail_edge_missing": 1,
|
|
452
472
|
"tail_edge_missing_max_age_minutes": 65.0,
|
|
@@ -467,11 +487,109 @@ offline `source` instead.
|
|
|
467
487
|
|
|
468
488
|
Keep the default strict: `allow_missing=false`. Tail-edge and bounded internal
|
|
469
489
|
gap-fill tolerance may return a row, but the response must mark
|
|
470
|
-
`freshness.degraded=true` and include validation evidence.
|
|
490
|
+
`freshness.degraded=true` and include validation evidence.
|
|
491
|
+
|
|
492
|
+
Per-Parameter keys in `max_source_lag_hours_by_parameter` and
|
|
493
|
+
`allow_missing_by_parameter` are full Parameter keys (`project/name:version`);
|
|
494
|
+
other spellings are ignored with a validation warning. `allow_missing_by_parameter`
|
|
495
|
+
overrides `allow_missing` for one Parameter in either direction and is omitted
|
|
496
|
+
from the manifest while empty, so adding the field does not change existing
|
|
497
|
+
hashes. A tolerated Parameter still marks the read degraded, and a deployment
|
|
498
|
+
with `freshness_policy=strict` rejects degraded reads.
|
|
499
|
+
|
|
500
|
+
The tail-edge and internal-gap-fill allowances are absolute lag ceilings measured
|
|
501
|
+
from the cutoff, not additions to the lag budget: a source past its budget is
|
|
502
|
+
tolerated when its lag is at most `max(tail_edge_missing_max_age_minutes,
|
|
503
|
+
max_tail_edge_missing * expected_frequency)` or at most
|
|
504
|
+
`internal_gap_fill_max_age_hours`. With the defaults (5h gap-fill ceiling) a
|
|
505
|
+
Parameter budget below 5h therefore degrades rather than fails; set
|
|
506
|
+
`allow_internal_gap_fill=false` (per manifest) when a budget must be hard.
|
|
507
|
+
Neither allowance changes values: realtime rows use the same alignment and
|
|
508
|
+
Operator code as a batch build, so these settings cannot create
|
|
509
|
+
training/serving skew. Choose budgets from observed arrival with
|
|
510
|
+
`get-parameter-freshness`. A freshness or
|
|
471
511
|
missing-data condition that may recover returns HTTP `503`; an invalid contract
|
|
472
512
|
returns HTTP `400`. Declaring `realtime_fetch` changes the manifest hash; leaving
|
|
473
513
|
it unset preserves older contract hashes and uses environment fallbacks.
|
|
474
514
|
|
|
515
|
+
`deadline_seconds` bounds the whole read. `chunk_days` pages long source reads
|
|
516
|
+
and falls back to `source_read.chunk_days` when unset.
|
|
517
|
+
|
|
518
|
+
#### Choosing a realtime fetch policy
|
|
519
|
+
|
|
520
|
+
The values above are also the environment defaults (`DATA_PLATFORM_REALTIME_*`).
|
|
521
|
+
They are strict and suit short-horizon forecasting on minute-level data. They
|
|
522
|
+
are a process fallback, not a decision for a particular model. Choose the
|
|
523
|
+
policy for each model from its data and its use, and per Parameter where
|
|
524
|
+
sources differ.
|
|
525
|
+
|
|
526
|
+
How the checks work:
|
|
527
|
+
|
|
528
|
+
- For each Parameter, the platform takes the newest source row at or before
|
|
529
|
+
the cutoff (the watermark) and computes `lag = cutoff - watermark`.
|
|
530
|
+
- The read is normal when the lag is within `max_source_lag_hours`, or within
|
|
531
|
+
the Parameter's entry in `max_source_lag_hours_by_parameter` (keyed
|
|
532
|
+
`project/name:version`).
|
|
533
|
+
- A larger lag is still accepted, marked `freshness.degraded=true`, when
|
|
534
|
+
`allow_tail_edge_missing` is on and the lag is within the larger of
|
|
535
|
+
`tail_edge_missing_max_age_minutes` and `max_tail_edge_missing` times the
|
|
536
|
+
Parameter's `expected_frequency`, or when `allow_internal_gap_fill` is on and
|
|
537
|
+
the lag is within `internal_gap_fill_max_age_hours`. With the defaults, a
|
|
538
|
+
source up to 5 hours behind is accepted as degraded. Set
|
|
539
|
+
`allow_internal_gap_fill: false` when the lag budget must be a hard limit.
|
|
540
|
+
- A Parameter with no rows in its window fails unless `allow_missing` is true.
|
|
541
|
+
`allow_missing` applies to every Parameter and also accepts any stale
|
|
542
|
+
source; there is no per-Parameter switch. Do not turn it on to tolerate one
|
|
543
|
+
optional input.
|
|
544
|
+
- None of these settings changes values. Holes inside the lookback reach the
|
|
545
|
+
Operator unchanged, so the Operator's frozen missing-data rule
|
|
546
|
+
([operator-authoring.md](operator-authoring.md), Online Period Aggregates)
|
|
547
|
+
is what keeps batch builds and realtime reads equal.
|
|
548
|
+
|
|
549
|
+
Decide with the user:
|
|
550
|
+
|
|
551
|
+
- Whether a late or missing source should fail visibly (HTTP `503`, rerun after
|
|
552
|
+
the data recovers) or return a degraded row. A long aggregate (for example a
|
|
553
|
+
daily mean) may barely change when one point is late, but a period that is
|
|
554
|
+
missing its last hours because a source stalled usually should fail.
|
|
555
|
+
- When the read runs relative to each source's arrival. The lag budget must
|
|
556
|
+
cover the latest normal arrival: schedule the read after a batch-loaded
|
|
557
|
+
source is complete, or give that Parameter a larger budget.
|
|
558
|
+
- Whether the read finishes within `deadline_seconds`. A long lookback over
|
|
559
|
+
several Parameters may need more than 30 seconds; measure it with
|
|
560
|
+
`fetch-inference-data` at a historical cutoff before choosing.
|
|
561
|
+
|
|
562
|
+
Record the decision in the inference DatasetManifest. Declare every field the
|
|
563
|
+
model relies on, even when it equals the current default: resolution is per
|
|
564
|
+
field, and an omitted field takes the process environment value, which can
|
|
565
|
+
differ between deployments. Note the reason for each value in the catalog
|
|
566
|
+
review. Changing the policy needs a new inference manifest and package
|
|
567
|
+
version, but not retraining. In each response, `policy.resolved_from` shows
|
|
568
|
+
whether a field came from `manifest` or `environment`; check that nothing you
|
|
569
|
+
meant to declare came from `environment`.
|
|
570
|
+
|
|
571
|
+
The `fetch-inference-data` options `--max-source-lag-hours`,
|
|
572
|
+
`--no-validate-freshness` and `--allow-missing` replace the manifest's whole
|
|
573
|
+
`realtime_fetch` section for that request; fields you do not pass fall back to
|
|
574
|
+
the environment, not to the manifest. Use them for diagnosis only.
|
|
575
|
+
|
|
576
|
+
Ask the data owner, and do not guess:
|
|
577
|
+
|
|
578
|
+
1. What each source timestamp means: interval start, interval end, or the
|
|
579
|
+
measurement instant, and in which timezone. This decides period boundaries
|
|
580
|
+
and the expected lag (an hourly record stamped at the hour start has a
|
|
581
|
+
watermark one hour before a midnight cutoff even when the day is complete).
|
|
582
|
+
2. How data arrives: streaming or batch loads, when the previous period is
|
|
583
|
+
complete on a normal day, and how late it can be.
|
|
584
|
+
3. Whether late corrections or backfills are written after first arrival;
|
|
585
|
+
these make a rerun at the same cutoff return a different row.
|
|
586
|
+
4. Whether the table has a trustworthy ingestion-time column. Confirm the
|
|
587
|
+
column exists (for example with the `data-source-exploration` Skill) before
|
|
588
|
+
declaring `time_semantics.ingested_at_field` or an availability strategy
|
|
589
|
+
that reads it; never copy that field from a template.
|
|
590
|
+
5. Which inputs may legitimately be absent (for example one faulty sensor) and
|
|
591
|
+
which must never be (for example a state indicator used by a business rule).
|
|
592
|
+
|
|
475
593
|
`abnormal_windows` excludes target windows whose data must not be trusted. The
|
|
476
594
|
policy and the lookback apply to the whole window set, not to individual
|
|
477
595
|
windows: a dataset is either a filtered rowset or a marked full rowset.
|
|
@@ -494,9 +612,9 @@ windows: a dataset is either a filtered rowset or a marked full rowset.
|
|
|
494
612
|
| `mark_only` | Drop nothing; record what is affected in lineage and validation. |
|
|
495
613
|
|
|
496
614
|
How far past a window to drop is derived from the widest resolved Operator history
|
|
497
|
-
requirement
|
|
498
|
-
|
|
499
|
-
maximum is used for source fetch and abnormal-window propagation. Do not restate
|
|
615
|
+
requirement: the larger of the cutoff-anchored and target-time-anchored
|
|
616
|
+
lookbacks (the horizon is not added, because the Operator cutoff is the row's
|
|
617
|
+
`event_time`). The maximum is used for source fetch and abnormal-window propagation. Do not restate
|
|
500
618
|
that number unless you want it asserted: an optional `input_lookback_hours` is
|
|
501
619
|
checked against the derived value and a mismatch is rejected. Note that a window
|
|
502
620
|
near the end of the target range can have its lookback clipped by the range end,
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Bind And Build From External Data Platform Mappings
|
|
2
|
+
|
|
3
|
+
Use after the user has authorized publishing confirmed source contracts. Discovery remains in
|
|
4
|
+
`data-source-exploration`; this workflow writes existing Parameter resources through the modeling API.
|
|
5
|
+
Verify the installed CLI and configured API using the main Skill, then inspect command help.
|
|
6
|
+
|
|
7
|
+
1. Discover a ready published Mapping with `list-data-platform-query-candidates`, then inspect
|
|
8
|
+
its pinned `active_revision.mapping_revision_id` with
|
|
9
|
+
`get-data-platform-mapping-revision ID REVISION`. Discovery returns the complete catalog
|
|
10
|
+
authorized for the integration account; it does not prove data coverage or reserve query access.
|
|
11
|
+
For older upstreams, follow the discovery reference's paged Mapping workflow.
|
|
12
|
+
2. Confirm numeric value output keys, the unique event-time output, units, source timezone,
|
|
13
|
+
frequency, precision, entity scope and historical coverage. Do not treat Mapping readiness or a
|
|
14
|
+
complete snapshot as proof of causal correctness. SQL may already compute values or limit history.
|
|
15
|
+
3. Write a binding JSON outside the platform repository:
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"project": "default",
|
|
20
|
+
"mapping_id": "11111111-1111-4111-8111-111111111111",
|
|
21
|
+
"mapping_revision_id": "22222222-2222-4222-8222-222222222222",
|
|
22
|
+
"output_keys": ["out_value"],
|
|
23
|
+
"expected_frequency": "10min",
|
|
24
|
+
"event_time_precision": "s"
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Substitute confirmed IDs and settings. `output_keys` contains value outputs only. Source timezone
|
|
29
|
+
comes from the ReadSpec; if missing, supply `time_semantics`. Optional `time_semantics`,
|
|
30
|
+
`quality_rules`, `owner`, `partition_seconds`, `max_rows`, `timeout_seconds` follow the existing
|
|
31
|
+
contracts. Never infer availability from request time. Strict `as_of` requires the Mapping to
|
|
32
|
+
expose the trustworthy availability field declared in `time_semantics.availability`.
|
|
33
|
+
4. Run `ml-platform bind-data-platform-parameters binding.json`. Preserve each returned `reference`
|
|
34
|
+
as a Feature input (`project`, `parameter`, `version`). The response also contains the full
|
|
35
|
+
Parameter. Do not manually recreate its source, SQL, credentials or version.
|
|
36
|
+
5. Continue normal Operator → Feature → FeatureSet → DatasetManifest publication. Operator history
|
|
37
|
+
requirements govern source lookback; binding does not add a shared fixed window. Build and realtime
|
|
38
|
+
reads use `source_mode=direct`.
|
|
39
|
+
6. For a DatasetManifest build, distinguish CLI submission from Worker execution. Inspect `get-job`
|
|
40
|
+
until a terminal status, then retrieve the DatasetArtifact. Confirm row and column counts against
|
|
41
|
+
the requested grid, Parquet column order, missing values, time coverage, and source-read evidence
|
|
42
|
+
(`mapping_revision_id`, `run_id`, `snapshot_id`, plan/window and actual read times) before handing
|
|
43
|
+
the dataset to model training. A submitted or running Kubernetes Job is not build evidence.
|
|
44
|
+
|
|
45
|
+
Repeated identical binding requests reuse deterministic Parameter identities. Changed Mapping revision
|
|
46
|
+
or effective configuration creates a new immutable version. Existing manually named Parameters are not
|
|
47
|
+
searched or merged. Multiple outputs are validated before writing, but each Parameter persists
|
|
48
|
+
independently; there is no cross-resource transaction. After an uncertain response, repeating the same
|
|
49
|
+
binding safely converges to the same Parameter contents. This does not mean uncertain upstream query
|
|
50
|
+
POSTs may be retried: inspect those runs separately.
|
|
51
|
+
|
|
52
|
+
Supported sources are single structured, unaggregated series, or SQL ReadSpecs without composed
|
|
53
|
+
inputs/expressions. SQL executes in the data platform. Ambiguous duplicate event times, partial snapshots and
|
|
54
|
+
revision/window mismatches fail. The adapter preserves source warnings, run, snapshot, Mapping
|
|
55
|
+
revision, plan, window and actual read times. Fixed definitions do not freeze mutable upstream rows
|
|
56
|
+
or make expiring snapshots permanent.
|
|
57
|
+
|
|
58
|
+
`read_started_at`/`read_finished_at` record when the adapter performed this read. They are audit
|
|
59
|
+
metadata, not per-row source availability evidence. A Mapping without a trustworthy published
|
|
60
|
+
availability output can be used for ordinary snapshot reads, but it cannot establish strict
|
|
61
|
+
historical `as_of` visibility. Do not substitute request/read time, event time, or `ingested_at`
|
|
62
|
+
for `available_at` unless the Parameter contract explicitly identifies that source field as the
|
|
63
|
+
trusted availability boundary. A complete snapshot proves transfer completeness, not historical
|
|
64
|
+
visibility or business coverage.
|
|
65
|
+
|
|
66
|
+
Mapping reads bypass ITSMP source cache so each read retains its upstream snapshot lineage.
|
|
67
|
+
`partition_seconds` defaults to 86400 (range 1–86400); each partition's `max_rows` defaults to and
|
|
68
|
+
cannot exceed 10000. One source read accepts at most 1024 partitions. `timeout_seconds` defaults
|
|
69
|
+
to 180 and accepts at most 600; it is checked between HTTP calls, whose own client timeout also
|
|
70
|
+
applies. These are source-adapter budgets, separate from Dataset build execution partitions.
|
|
71
|
+
If coverage exceeds a budget, choose a justified source partition or build window; never accept
|
|
72
|
+
truncation or remove required Operator history to make a read succeed. The adapter converts
|
|
73
|
+
upstream half-open windows into the closed source observation boundary, including its end instant;
|
|
74
|
+
the Dataset target grid remains half-open.
|
|
75
|
+
|
|
76
|
+
## Worker Runtime Requirements And Failures
|
|
77
|
+
|
|
78
|
+
The business CLI does not configure Kubernetes, publish images or mount credentials. The platform
|
|
79
|
+
operator must configure the modeling API with the upstream integration Secret and configure the
|
|
80
|
+
dataset-build Job template to mount that Secret read-only and set
|
|
81
|
+
`DATA_PLATFORM_UPSTREAM_CONFIG_FILE`. Build Workers must receive the updated dataset-build image
|
|
82
|
+
containing the `data_platform_mapping` source adapter; changing only the API image is insufficient.
|
|
83
|
+
The API and Worker must use compatible platform code, but training and serving images do not need
|
|
84
|
+
this data-source adapter unless they themselves read Mapping data.
|
|
85
|
+
|
|
86
|
+
After catalog publication and build submission:
|
|
87
|
+
|
|
88
|
+
- On terminal success, inspect and download the artifact before reporting data success.
|
|
89
|
+
- If the job is accepted but remains queued, check Worker scheduling, quotas and active Jobs with
|
|
90
|
+
the platform operator; do not resubmit while its durable state is uncertain.
|
|
91
|
+
- If the Worker reports `unsupported source adapter` for `data_platform_mapping`, verify the
|
|
92
|
+
deployed dataset-build image includes the adapter. A healthy API or successful catalog `apply`
|
|
93
|
+
does not prove the Worker image was updated.
|
|
94
|
+
- If the Worker cannot load `DATA_PLATFORM_UPSTREAM_CONFIG_FILE`, or upstream authentication/network
|
|
95
|
+
fails, have the platform operator verify the Secret key/path, read-only mount, Worker namespace,
|
|
96
|
+
egress and integration-account permissions. Never copy credentials into the Parameter, Manifest,
|
|
97
|
+
CLI arguments or logs.
|
|
98
|
+
- For an uncertain query POST, inspect the upstream run before retrying. For a failed build, inspect
|
|
99
|
+
the durable Job and Worker logs, correct the identified cause, and submit a new attempt only after
|
|
100
|
+
confirming the previous attempt is terminal; do not blindly repeat the same request.
|
|
101
|
+
|
|
102
|
+
The Skill can guide asset authoring and API/CLI evidence collection, but it cannot diagnose container
|
|
103
|
+
exit causes from `get-job` alone or safely change the cluster. Keep Kubernetes events, pod reason,
|
|
104
|
+
container exit code and log tail as separate operational evidence.
|