@aiaiai-pt/frankctl 0.4.3 → 0.5.0

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/CHANGELOG.md CHANGED
@@ -3,6 +3,36 @@
3
3
  All notable changes to `@aiaiai-pt/frankctl` are documented here. This project
4
4
  adheres to [Semantic Versioning](https://semver.org/).
5
5
 
6
+ ## 0.5.0
7
+
8
+ - Make `Source.spec.streams` declarative desired state: create or patch named
9
+ streams without resetting runtime state, report omitted streams as unmanaged,
10
+ export configuration-only stream declarations, and scope `apply --wait` to
11
+ explicitly declared enabled streams.
12
+ - Add Source-level execution and chunk-budget fields to declarative apply,
13
+ create/update validation, server preflight, and export.
14
+ - Extend server preflight with opt-in, GET-only live ontology validation through
15
+ `pipelines apply --dry-run-server --live-ontology`.
16
+ - Correlate `pipelines apply --wait` to the exact Source, Transform, and ontology
17
+ runs it starts; emit precision-safe snapshot IDs and durable REST bulk-job
18
+ evidence through `--json`.
19
+ - Validate relationship prerequisites through `BackingDataset.metadata.dependsOn`
20
+ and execute manual BackingDatasets in topological order.
21
+ - Treat raw pipeline exports as private review material when Sources contain
22
+ literal credentials; `frankctl` does not interpolate environment variables in
23
+ Source configuration.
24
+
25
+ ## 0.4.4
26
+
27
+ - Add `backing-datasets sync --force` and poll the exact ontology sync run,
28
+ exposing safe replay reason, snapshot, row count, and attempted/applied
29
+ effective-SyncSpec fingerprint evidence.
30
+ - Preserve ordinary-sync compatibility with an older API through legacy status
31
+ polling and safe no-wait output. Capability-check `--force` before mutation,
32
+ so an unsupported server receives zero sync POSTs.
33
+ - Prefer the precision-safe `snapshot_id_exact` in human sync output while JSON
34
+ retains numeric `snapshot_id` and exposes the additive exact decimal string.
35
+
6
36
  ## 0.4.3
7
37
 
8
38
  - Rewrite the bundled agent skill (`SKILL.md`) to be outward-facing and declarative-first: leads with the repeatable `pipelines scaffold → edit → apply` loop (multi-doc `frank.platform/v1` YAML, `--dry-run-server`, `--wait`, idempotency/`--allow-recreate`), with the imperative subcommands as a reference. Drops internal-only content (ticket refs, dev-mode/E2E-harness notes, roadmap).
package/README.md CHANGED
@@ -37,7 +37,7 @@ frankctl --help
37
37
  - `frankctl config set|get|list`
38
38
  - `frankctl pipelines list|get|validate|apply|export`
39
39
  - `frankctl sources list|get|create|update|delete|discover|sync|logs|history`
40
- - `frankctl backing-datasets list|get|create|update|delete` (alias: `frankctl bd`)
40
+ - `frankctl backing-datasets list|get|create|update|delete|sync|entities` (alias: `frankctl bd`; `sync --force` replays unchanged data/spec)
41
41
  - `frankctl sources streams list|set|refresh-schema`
42
42
  - `frankctl transforms list|get|runs|logs|trigger`
43
43
  - `frankctl runs get|wait|cancel`
@@ -48,17 +48,56 @@ frankctl --help
48
48
 
49
49
  Config files for `sources create|update`, `backing-datasets create|update`, and `sources streams set` accept YAML or JSON (use `-` to read stdin).
50
50
 
51
+ `frankctl backing-datasets sync <id>` polls exact run evidence when the API
52
+ advertises sync contract v2. For an ordinary sync against an older API, it
53
+ falls back to BackingDataset status polling and explicitly reports that replay
54
+ evidence is unavailable. `--force` is stricter: the CLI verifies the
55
+ capabilities endpoint before the mutating request and sends zero sync POSTs
56
+ when force replay is unsupported or unadvertised.
57
+
51
58
  ### Declarative apply (`pipelines apply -f`)
52
59
 
53
- `frankctl pipelines apply -f vertical.yaml` provisions a complete Source +
54
- Pipeline + BackingDataset triple from a single multi-doc YAML file.
60
+ `frankctl pipelines apply -f vertical.yaml` can provision a complete Source +
61
+ Pipeline + BackingDataset triple from a single multi-doc YAML file when the
62
+ Source contains no credential value.
55
63
  Docs use the kubectl-style envelope (`apiVersion: frank.platform/v1`,
56
64
  `kind:`, `metadata.name:`, `spec:`). The CLI sorts by kind (Source →
57
65
  Pipeline → BackingDataset), resolves cross-doc name references to UUIDs,
58
66
  and POSTs each doc with `?if-not-exists=true`. `frankctl pipelines export
59
67
  <id> -o yaml` round-trips an existing pipeline back to a multi-doc YAML
60
- file ready for adoption into git. See `../docs/guides/cli.md` for the
61
- full reference.
68
+ file for private review. Current Source config uses literal credentials,
69
+ `frankctl` performs no environment interpolation, and export preserves that
70
+ config. Split secret-bearing Sources into an untracked mode-0600 file before
71
+ committing the non-secret Pipeline/BackingDataset declarations. See
72
+ `../docs/guides/cli.md` for the full reference and Frank issue #602 for the
73
+ future Vault-backed reference contract.
74
+
75
+ Relationship-bearing BackingDatasets declare their prerequisites in
76
+ `metadata.dependsOn` and explicitly use `spec.sync_mode: manual`. The graph is
77
+ currently invocation-local rather than persisted server policy, so missing mode
78
+ and `on_materialization` are rejected. `--wait` directly triggers those manual
79
+ BackingDatasets in topological order and requires external targets to be already
80
+ `synced`; missing dependencies, cycles, and self-referential relationships fail
81
+ before execution.
82
+
83
+ `Source.spec.streams` is desired state on create and reapply: declared streams
84
+ are created/patched by name without resetting cursor, chunk, counter, or run
85
+ state. Omitted streams are preserved and reported as unmanaged; explicitly set
86
+ `is_enabled: false` to disable one. Client dry-run shows the declaration,
87
+ server dry-run shows per-stream actions, and export emits config-only stream
88
+ declarations without runtime state. With `--wait`, an explicit declaration
89
+ syncs only its enabled stream names, so preserved unmanaged streams do not run.
90
+ For a migration, explicitly declare known obsolete enabled streams with
91
+ `is_enabled: false` as well, so scheduled/direct Source syncs converge safely.
92
+
93
+ Use `--dry-run-server --live-ontology` for an opt-in, GET-only check of
94
+ BackingDataset mappings against the server's configured ontology. Use
95
+ `--wait --json` to execute with exact Source, Transform, and BackingDataset
96
+ run correlation and emit one evidence object. `--wait` does not replace a
97
+ separate ontology entity readback; an ontology run reported as `skipped`
98
+ means the snapshot was already converged and no rows were replayed. REST bulk
99
+ runs include durable job IDs and submitted/completed counts from the exact
100
+ ontology SyncRun; credentials and row payloads are never included.
62
101
 
63
102
  ## Environment
64
103