Releases: iemejia/fabio
v0.31.0 — Agent Safety & Discoverability
v0.31.0 — Agent Safety & Discoverability
This release transforms fabio into a fully safety-hardened, agent-native CLI with defense-in-depth controls and runtime discoverability that achieves 90% correctness with coding agents.
Agent Safety (New)
Three independent safety boundaries for agent deployments:
--readonly — Blocks all mutations (POST/PUT/PATCH/DELETE) at the HTTP transport layer before network dispatch. Read operations pass through normally.
FABIO_READONLY=1 fabio workspace list # works
FABIO_READONLY=1 fabio workspace create # BLOCKED (READONLY_MODE error)--enable-commands / --disable-commands — Runtime command allowlists/denylists. Operators constrain which command groups an agent can access.
FABIO_ENABLE_COMMANDS=workspace,lakehouse fabio workspace list # works
FABIO_ENABLE_COMMANDS=workspace,lakehouse fabio deploy plan # BLOCKED (FORBIDDEN)--wrap-untrusted — Wraps user-authored fields (displayName, description) with <<<UNTRUSTED>>>...<<<END_UNTRUSTED>>> markers to prevent prompt injection when agent processes fabio output.
All three support environment variables for operator-controlled enforcement.
MCP Server Safety (New)
The MCP server is now read-only by default:
fabio mcp serve # 366 read-only tools
fabio mcp serve --allow-write # 810 tools (all)
fabio mcp serve --allow-write --allow-tool "workspace,lakehouse" # scoped
fabio mcp serve --list-tools # inspect without startingStable Exit Codes (New)
Agents can branch on $? without JSON parsing:
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Generic error |
| 2 | Usage error |
| 3 | AUTH_REQUIRED |
| 4 | FORBIDDEN / READONLY_MODE |
| 5 | NOT_FOUND |
| 6 | CONFLICT |
| 7 | RATE_LIMITED |
| 8 | TIMEOUT |
| 9 | NETWORK_ERROR |
Runtime Discoverability (Enhanced)
--budget flag — Token-aware schema output that returns the richest subset within a token limit:
fabio context agent --budget 4000 # full detail for priority groups, compact for rest222 inline examples — Every major command now has CLI usage examples accessible via fabio context describe <group> <cmd>.
56 output shape examples — Agents can see response shapes via fabio context examples <group> <cmd>.
Safety state introspection — fabio context agent now includes a safety field showing effective restrictions.
Agent Skill (Moved In-Repo)
The agent skill now ships at .agents/skills/fabio/ in the main repository. No more separate fabio-skills repo (archived). Install via:
npx skills add https://github.com/iemejia/fabioEval results: 90% pass rate (69/77 tests) with gpt-4o-mini in CI.
Documentation Simplified
- Deleted
COMMANDS.mdandEXAMPLES.md— the binary is the documentation - All agent knowledge lives in
commands.json(auto-generated + examples preserved) fabio context agent/describe/find/workflowprovides runtime discovery
Stats
- 22 E2E safety tests covering all new features
- 77-case promptfoo eval running in CI via Azure OpenAI
- 749 unit tests passing
- Binary size: 19 MB (656 KB embedded context data = 3.5%)
Full Changelog: v0.30.0...v0.31.0
Full Changelog: v0.30.0...v0.31.0
v0.30.0
What's New
This release brings a major upgrade to agent discoverability with context hints embedded in every --help output, a complete rewrite of the Data Agent command group to use the new public staging management API (28 subcommands), and significant CI/CD and Docker improvements including distroless images and full GitHub Actions SHA pinning.
Data Agent: Full Staging Management API
The Data Agent command group has been completely rewritten to use Fabric's new public staging management API (Jun 2026), replacing the previous read-modify-write definition approach with 28 dedicated endpoints:
get-config/update-configwith--stage staging|publishedadd-datasource/remove-datasource/list-datasources/show-datasource/update-datasource(auto-type detection, LRO-aware)select-tables(toggle table selection in discovered schema)list-elements/describe-element/delete-elementwith--stageadd-fewshot/remove-fewshot/list-fewshots/show-fewshot/update-fewshot/clear-fewshots/upload-fewshots(JSON + CSV/TSV bulk upload)query --stage sandbox|productionwith--timeoutand--show-stepspublish/resetfor staging lifecycle
Context Discovery Hints for AI Agents
Every --help output now includes a CONTEXT section pointing agents to relevant schemas, workflows, and examples:
fabio lakehouse --help
...
CONTEXT:
fabio context schema lakehouse Item definition schema
fabio context workflow lakehouse-etl Multi-step workflow recipe
fabio context examples lakehouse list Output shape example
- All 72 command groups annotated with contextual hints
- 12 new output examples for high-value command groups (lakehouse, workspace, deploy, etc.)
fabio context examplesnow supports optional group-browsable discovery- Agent schema (
fabio context agent) updated with all 88 previously missing subcommands
Dataflow Execute-Query: LRO + Arrow Version
fabio dataflow execute-query now handles 202 LRO responses for long-running queries (up to 90s server-side) and supports --arrow-version 1|2 for Apache Arrow IPC format version selection.
Improvements
- performance: Pre-allocate collections on hot paths, add
#[inline]hints to hot-path functions - refactoring: Deduplicate hash functions, standardize base64 imports, adopt idiomatic Rust patterns (6 refactoring rounds total)
- MSRV bump to 1.96: Leverages
floor_char_boundary(),is_none_or(),is_some_and(),Duration::from_mins(), and other modern Rust features - apache-airflow-job: Add
--update-metadataflag toupdate-definition - paginated-report: Harmonize
--contenthandling across commands
Bug Fixes
- context: Agent schema now covers the complete CLI surface (88 subcommands were missing)
- ci: Tolerate GitHub API unreachable in upgrade tests
- ci: Resolve clippy, test, and audit failures
Docker & Build
- Distroless runtime image: Production Docker image now uses debian-slim with vendored OpenSSL and non-root user (~20MB smaller)
- Devcontainer: Tools baked into image, pinned to
ubuntu:24.04, multi-arch build (amd64 + arm64)
CI/CD
- All GitHub Actions pinned to full commit SHA (supply-chain hardening)
- Cancel-in-progress for PR-triggered workflows
- Reduced GHA minutes: extracted fmt check, dropped release builds from CI, weekly CodeQL
- Cache cleanup workflow for stale PR/branch caches
rustsec/audit-checkaction replaces manual audit- Docker workflow only triggers on Dockerfile/devcontainer changes
Testing
- data-agent: Complete E2E test coverage for all 28 subcommands (34 tests)
- workspace CMK: E2E tests for encryption assign/reset/get commands
Stats
- 51 commits, 205 files changed, +7,414 / -3,855 lines
- MSRV bumped from 1.85 to 1.96
- Data Agent rewritten: 28 subcommands via public staging API
Full Changelog: v0.29.0...v0.30.0
What's Changed
- chore(deps): bump softprops/action-gh-release from 3.0.0 to 3.0.1 by @dependabot[bot] in #23
- chore(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in #24
- feat: sync with Fabric REST API spec 2026-06-24 by @iemejia in #25
Full Changelog: v0.29.0...v0.30.0
v0.29.0 — Ontology Round-Trip (OWL Import/Export)
v0.29.0 — Ontology Round-Trip (OWL Import/Export)
Highlights
Full OWL round-trip support for Fabric Ontologies — import from and export to standard RDF/XML and JSON-LD. Compatible with Ontology Playground.
New Commands
fabio ontology import— Parse OWL (RDF/XML or JSON-LD) and push directly to a Fabric Ontology itemfabio ontology export— Fetch a Fabric Ontology and serialize to OWL RDF/XML or JSON-LDfabio context tenant --format owl— Export tenant topology as OWL schema (importable)fabio context tenant --format rdf— Export tenant topology as RDF/XML schema (importable)fabio context tenant --format full— Schema + instances in one RDF/XML file (works everywhere)
Workflows
# Import Ontology Playground catalogue files directly into Fabric
fabio ontology import --workspace $WS --id $ONT --file cosmic-coffee.rdf
# Export and re-import (full round-trip preserves types + relationships)
fabio ontology export --workspace $WS --id $ONT --format rdf --file out.rdf
fabio ontology import --workspace $WS --id $ONT2 --file out.rdf
# Extract tenant topology → Fabric Ontology (one pipeline)
fabio context tenant --workspace $WS --deep --format full --output-file tenant.rdf
fabio ontology import --workspace $WS --id $ONT --file tenant.rdfStats
- 14 commits since v0.28.0
- 14 unit tests + 10 live E2E tests for import/export/round-trip
- 5 cross-compilation targets passing
- New dependency:
quick-xml0.40.1 (MIT license) for RDF/XML parsing
Full Changelog
Full Changelog: v0.28.0...v0.29.0
v0.28.0 — Real-Time Intelligence & Developer Experience
v0.28.0 — Real-Time Intelligence & Developer Experience
Highlights
This release brings 13 new commands covering the full Real-Time Intelligence (RTI) stack — schema discovery, inline ingestion, query diagnostics, deeplinks, eventstream building, and one-command alert creation. It also introduces prek for fast pre-commit hooks, 20 context output examples for AI agents, and a major codebase restructuring into directory modules.
New Features
KQL Database Intelligence (8 new commands)
Inspired by the Microsoft Fabric RTI MCP server, fabio now matches its schema discovery and diagnostics capabilities:
# Schema discovery
fabio kql-database list-entities --workspace $WS --id $KDB
fabio kql-database describe --workspace $WS --id $KDB
fabio kql-database describe-entity --workspace $WS --id $KDB --entity-name StormEvents
fabio kql-database sample --workspace $WS --id $KDB --entity-name StormEvents --count 5
# Inline ingestion
fabio kql-database ingest --workspace $WS --id $KDB --table Events --data "name,val\ntest,42"
# Query analysis
fabio kql-database show-queryplan --workspace $WS --id $KDB --kql "T | summarize count()"
fabio kql-database diagnostics --workspace $WS --id $KDB
# Portal deeplinks
fabio kql-database deeplink --workspace $WS --id $KDB --kql "T | take 100"Eventstream Builder (4 new commands)
fabio eventstream add-sample-source --workspace $WS --id $ES --name test-data
fabio eventstream add-derived-stream --workspace $WS --id $ES --name filtered --input-node src-stream
fabio eventstream validate --file definition.json
fabio eventstream list-components --category sourceReflex Create-Trigger
One command to create a complete Data Activator trigger with auto-generated entities:
fabio reflex create-trigger --workspace $WS \
--name "Flood Alert" --eventhouse-id $EH --database WeatherDB \
--table StormEvents --condition "State == 'ILLINOIS' and EventType == 'Flood'" \
--action email --recipients "ops@company.com"Lakehouse Iceberg REST Catalog
New commands for Apache Iceberg metadata access via OneLake Table API:
iceberg-config,iceberg-namespaces,iceberg-namespace,iceberg-tables,iceberg-tableiceberg-table-exists,iceberg-namespace-exists,iceberg-credentialsiceberg-stats,iceberg-snapshots
fabio context Unified Command
The agent discovery system is now unified under fabio context:
fabio context agent— machine-readable command schemafabio context tenant— workspace graph extractionfabio context schemas/workflows/best-practices/examples— semantic knowledge
Developer Experience
- prek pre-commit hooks: Fast Rust-native pre-commit validation (format, clippy, gitleaks, file hygiene)
- 20 output examples: AI agents can now see response shapes for key commands via
fabio context examples <group> <command> - Directory module structure: All large files split into maintainable modules (kql_database/, eventstream/, lakehouse/, workspace/, deploy/, context/)
Bug Fixes
- Fix
context/extract→context/tenantnaming in all references - Fix missing
create-directoryin agent schema - Fix stale path references after context/ restructure
Stats
- 36 commits since v0.27.0
- 13 new commands, bringing total to 843+ subcommands
- 27 new tests (10 unit + 17 E2E) for new features
- 5/5 cross-compilation targets passing (linux/macos/windows x64+arm64)
Full Changelog
Full Changelog: v0.27.0...v0.28.0
v0.27.0
What's New
This release adds the Azure Databricks Storage item type and data pipeline schedule/instance management, syncing with the latest Microsoft Fabric REST API specs (commit 152e811). It also includes a bug fix for the definition part path and expanded E2E test coverage for newly-enabled features.
New Commands
Azure Databricks Storage (fabio azure-databricks-storage):
list,show,create,update,delete,get-definition,update-definition- New Fabric item type for Azure Databricks integration
- Definition format:
AzureDatabricksStorageV1, part path:definition.json - Registered in
DEPLOY_ORDERfor CI/CD deployment support
Data Pipeline Schedule/Instance Management (fabio data-pipeline):
list-schedules,get-schedule,update-schedule,delete-schedule-- full schedule CRUDlist-instances,get-instance-- job execution history
Bug Fixes
- azure-databricks-storage: Definition part path corrected from
AzureDatabricksStorage.jsontodefinition.json(per API spec examples) - ci: Restricted Copilot git access to read-only in the sync workflow
Improvements
- 22 new unit tests for azure-databricks-storage and data-pipeline schedule/instance functions
- 7 new E2E tests for azure-databricks-storage (dry-run, error handling, lifecycle)
- 4 new E2E tests for mirrored-catalog (now that the feature is tenant-enabled)
- 3 new E2E tests for data-pipeline schedule/instance commands
CI/CD
- Sync workflow prompt enriched with examples and behavior harvesting rules
- Copilot git access restricted to read-only for security
Stats
- 9 commits, 16 files changed, +1709 / -31 lines
- 1001 unit/offline tests passing (22 new)
- All 5 cross-compilation targets passing (linux/macos/windows x64+arm64)
Full Changelog: v0.26.0...v0.27.0
Full Changelog: v0.26.0...v0.27.0
v0.26.0
What's New
This release transforms the data-agent command group from 9 basic CRUD subcommands into a comprehensive 22-subcommand management surface, inspired by the official fabric-data-agent-sdk (v0.1.24a0). You can now create, configure, and deploy Fabric Data Agents entirely from the CLI — adding data sources, managing few-shot examples, setting table descriptions, and querying agents — without touching the Fabric portal.
Data Agent: Datasource Management
Add, remove, list, and inspect data sources with auto-type detection from Fabric artifacts:
# Auto-detects Lakehouse type from artifact
fabio data-agent add-datasource --workspace $WS --id $DA --artifact "SalesLakehouse"
# List and inspect configured sources
fabio data-agent list-datasources --workspace $WS --id $DA
fabio data-agent show-datasource --workspace $WS --id $DA --datasource "SalesLakehouse"
# Select/unselect tables for the agent
fabio data-agent select-tables --workspace $WS --id $DA --datasource $LH --tables "orders,products"Supported artifact types: Lakehouse, Warehouse, KQLDatabase, SemanticModel, Ontology, GraphModel, MirroredDatabase, SQLDatabase.
Data Agent: Few-Shot Examples
Manage question/query pairs that teach the agent how to translate natural language to SQL/KQL:
# Add a single example
fabio data-agent add-fewshot --workspace $WS --id $DA --datasource $LH \
--question "Top customer by revenue?" \
--answer "SELECT TOP 1 customer_name, SUM(total_amount) FROM orders GROUP BY customer_name ORDER BY 2 DESC"
# Bulk upload from CSV or JSON
fabio data-agent upload-fewshots --workspace $WS --id $DA --datasource $LH --file fewshots.csvDuplicate questions are auto-renamed with [N] suffixes (matching the SDK's behavior).
Data Agent: Configuration & Element Descriptions
# Set AI instructions and enable preview runtime
fabio data-agent update-config --workspace $WS --id $DA \
--instructions-file instructions.txt --enable-preview-runtime
# List tables/columns with selection state
fabio data-agent list-elements --workspace $WS --id $DA --datasource $LH
# Set descriptions to help the agent understand schema semantics
fabio data-agent describe-element --workspace $WS --id $DA --datasource $LH \
--path "dbo.orders.total_amount" --description "Total order value in USD"Data Agent: Enhanced Query & Publishing
# Query the draft agent before publishing
fabio data-agent query --workspace $WS --id $DA --stage sandbox --prompt "Test query"
# Configurable timeout (default: 300s)
fabio data-agent query --workspace $WS --id $DA --timeout 600 --prompt "Complex query..."
# Publish to M365 Copilot Agent Store
fabio data-agent publish --workspace $WS --id $DA --to-m365Bug Fixes
- data-agent: Fix
--querynaming conflict — theadd-fewshotSQL query flag conflicted with the global JMESPath--queryflag, causing null output. Renamed to--answer(with--sqlalias) (60f5f20)
Documentation
- Comprehensive AGENTS.md update with 17 new API behaviors discovered from the official Python SDK, including internal workload management URLs, schema discovery endpoint, M365 publishing endpoint, datasource type mappings, element types, and operational limits
- Full rewrite of EXAMPLES.md data-agent section with 8 subsections covering all 22 subcommands
- COMMANDS.md expanded from 9 to 22 data-agent entries
- agent-context schema updated for AI agent discovery
Dependencies
- Bump
zipfrom 2.4.2 to 7.2.0 (Dependabot) - Add
uuidv1 with v4 feature (few-shot ID generation) - Update
h20.4.14 → 0.4.15
Stats
- 11 commits, 9 files changed, +3,774 / -87 lines
- 749 unit tests (+34 new), 34 data-agent e2e tests (all passing live)
- Cross-compilation: 5/5 targets pass (linux x64/arm64, macOS x64/arm64, Windows x64)
Full Changelog: v0.25.0...v0.26.0
What's Changed
- chore(deps): bump zip from 2.4.2 to 7.2.0 by @dependabot[bot] in #22
Full Changelog: v0.25.0...v0.26.0
v0.25.0
v0.25.0
Highlights
fabio upgrade — Self-update command
Fabio can now update itself to the latest release directly from GitHub:
fabio upgrade --check # check if update is available
fabio upgrade # download, verify SHA256, replace binary
fabio upgrade --target-version 0.24.0 # pin specific versionSafety features:
- SHA256 checksum verification before binary replacement
- Refuses to downgrade unless
--forceis passed - Development builds (
-devsuffix) are protected from accidental overwrite - Atomic binary replacement (rename-dance on Windows for locked exe)
- Full
--dry-runsupport
Profile system improvements
--profileflag now works correctly — Previously only affected private link routing; now correctly overrides workspace, output, and capacity for the specified profileprofile savemerges — Adding a single field no longer wipes other configured fields--private-link-workspaceflag — Configurable via CLI (no more manual JSON editing)- Capacity injection —
FABIO_CAPACITYenv var wired from profiles intoworkspace assign-capacityandgateway create
Performance
- Context extract auto-scales concurrency to CPU count (previously hardcoded at 8)
Security
- Added
SECURITY.mdwith vulnerability reporting policy, scope, and response timeline
What's Changed
New Features
fabio upgradecommand (check/download/verify/replace binary from GitHub Releases)--private-link-workspaceflag onprofile save- Dev build detection: refuses upgrade on
-devversions with clear message
Bug Fixes
--profileflag now correctly overrides workspace/output/capacity (not just private_link)profile savemerges with existing profile (omitted fields preserved)FABIO_CAPACITYwired from profiles to workspace/gateway commands- Downgrade protection: refuses to install older version without
--force
Performance
- Context extract concurrency auto-scales to available CPU cores
Documentation
- Security policy (SECURITY.md)
- Strengthened testing requirements for coding agents
- Comprehensive profile documentation across all markdown files
- Renamed "agent-first" to "agent-native" across codebase
Stats
- 15 commits since v0.24.0
- 22 unit tests + 10 E2E tests for new features
- Profile tests: 17 total (13 existing + 4 new)
- Zero clippy warnings, zero unsafe code violations
Full Changelog
Full Changelog: v0.24.0...v0.25.0
v0.24.0
What's New
This release introduces fabio context extract — a new command that builds a relationship graph of Fabric workspace items for use as structured context in coding agents, AI assistants, and external applications. The graph captures items (nodes), their relationships (edges), and workspace metadata, with three layers of discovery depth and incremental building support.
New Command: context extract
fabio context extract scans one or more Fabric workspaces and produces a graph of items and their relationships:
# Quick inventory (~8s for 20 workspaces)
fabio context extract --workspace $WS
# Full relationship discovery via definition scanning (~4m for 154 items)
fabio context extract --workspace $WS --deep --include-connections
# RDF-compatible JSON-LD output for graph databases
fabio context extract --workspace $WS --deep --format jsonldKey capabilities:
- Three-layer relationship discovery: properties (fast), definitions via
--deep(thorough), connections via--include-connections - Parallel execution: concurrent workspace resolution, item listing, and detail fetching
- 10 relationship types discovered automatically:
child_of,has_endpoint,default_lakehouse,bound_to_model,reads_from,streams_to,queries,executes,definition_ref,workspace_ref - GUID scanning: discovers all cross-references by regex-matching UUIDs in decoded definitions against a registry of known item IDs — no type-specific parsing logic needed
Incremental Context Building
Agents can build context progressively without re-scanning everything:
# Fast inventory first
fabio context extract --workspace $WS --no-properties --output-file graph.json
# Deepen a specific workspace
fabio context extract --workspace $WS --deep --merge graph.json --output-file graph.json
# Add another workspace
fabio context extract --workspace $WS2 --deep --merge graph.json --output-file graph.json--no-properties— ultra-fast mode (~3s for 20 workspaces), just item names and types--output-file— persist graph to disk for reuse across sessions--merge— load an existing graph and union new nodes/edges into it (idempotent)
JSON-LD Output Format
--format jsonld produces output that is simultaneously valid JSON (agents consume as-is) and valid RDF (importable into Neptune, Stardog, Jena, or any SPARQL endpoint):
{
"@context": {"fabric": "https://api.fabric.microsoft.com/ontology/", ...},
"@graph": [
{"@id": "urn:fabric:item:uuid", "@type": "fabric:Notebook", "name": "...",
"fabric:defaultLakehouse": {"@id": "urn:fabric:item:target-uuid"}}
]
}No external RDF crate needed — pure serde_json construction.
Performance
Benchmarked against a live tenant with 20 workspaces and 154 items:
| Mode | Time | Edges |
|---|---|---|
| Shallow (default) | 7.7s | 2 |
| Deep + connections | 4m 18s | 88 |
| No-properties (inventory only) | ~3s | 0 |
Improvements
- Parallel workspace operations: workspace resolution and item listing run concurrently (2x shallow speedup vs sequential)
- Smart definition skipping: SQLEndpoint, Dashboard, Datamart, PaginatedReport, MLModel, MLExperiment are skipped in deep mode (saves ~20% LRO calls)
API Behaviors Documented
bulkExportDefinitionsAPI format documented (was previously undocumented in our codebase):POST /workspaces/{ws}/items/bulkExportDefinitions?beta=Truewith{"mode":"All"}. Benchmarked but rejected for context extract — requires read+write permissions per item, resulting in only 14/154 items exported vs 35/154 with per-itemgetDefinition. Completeness > speed for agent context.
Stats
- 12 commits, 11 files changed, +2,393 / -14 lines
- 15 unit tests + 20 E2E tests (10 offline dry-run + 10 live tenant validated)
- Total test count: 1,657 (915 unit + 742 E2E)
- Cross-compilation: 5/5 targets pass (linux x64/arm64, macOS x64/arm64, Windows x64)
Full Changelog: v0.23.0...v0.24.0
Full Changelog: v0.23.0...v0.24.0
v0.23.0
v0.23.0 — 2026-06-13
Highlights
SQL Endpoint Query — New fabio sql-endpoint query command for executing T-SQL queries directly against SQL analytics endpoints. Supports inline SQL, @file input, and stdin piping:
fabio sql-endpoint query --workspace $WS --id $SQLEP \
--sql "SELECT TOP 10 * FROM dbo.sales ORDER BY order_date DESC"Self-Correcting Error Hints — ~65 error paths now include structured hint fields with corrective guidance. When an agent makes a mistake (wrong flag, invalid input, missing permissions), the error response tells it exactly how to fix the issue — including valid enum values, example commands, and required roles.
Deploy YAML Parameters — fabio deploy plan/apply --parameters params.yaml --env dev now supports YAML format alongside JSON for parameter files, reducing boilerplate in CI/CD pipelines.
New Features
- sql-endpoint query: Execute T-SQL against SQL endpoints by ID with full input modes (inline, @file, stdin)
- Self-correcting errors: Structured
hintfields on ~65 error paths (deploy config/ordering/platform, ontology, auth, item operations) guide agents to correct their mistakes without external documentation - Deploy YAML parameters: Parameter files can now be YAML or JSON (auto-detected by extension)
- Release script improvements:
scripts/release.shnow validates dependency freshness and runs full checks (fmt + clippy + test + cross-check) before tagging
Documentation
- Rewrote README intro for a friendlier, more accessible tone
- Added fabric-cicd migration/compatibility guide to EXAMPLES.md
- Added source directory creation approaches for fabric-cicd users
- Restructured release workflow in AGENTS.md with comprehensive 8-step pre-release checklist
Stats
- 12 commits, 27 files changed, +1256 / -316 lines
- 21 dependencies updated to latest compatible versions
- All 5 cross-compilation targets passing (linux x64/arm64, macOS x64/arm64, Windows x64)
Full Changelog: v0.22.0...v0.23.0
Full Changelog: v0.22.0...v0.23.0
v0.22.0
Full fabric-cicd Compatibility
This release makes fabio deploy a strict superset of Microsoft's fabric-cicd Python library. Source directories exported by fabric-cicd or Fabric's git integration work identically with fabio — while fabio adds plan/apply separation, content-hash skip detection, rename tracking, and dry-run that fabric-cicd lacks.
New Deploy Features
- Config file support (
--config <file> --env <name>) — JSON or YAML with per-environment workspace mapping, filtering, and option defaults - Git-diff selective deploy (
--git-diff <ref>) — only deploy items changed since a git reference - Selective filtering —
--exclude-regex,--include-items,--include-folders,--exclude-folders - Workspace folder management — infers folder hierarchy from source directory, creates/moves/deletes folders automatically
- Workspace ID auto-replacement — replaces
00000000-...placeholder with target workspace UUID (regex-based, context-aware) - Protected type deletion guards — Lakehouse, Warehouse, SQLDatabase, Eventhouse, KQLDatabase require
--allow-delete-typesto be deleted - Dataflow dependency ordering — topological sort for cross-dataflow references (same as DataPipeline)
fabric-cicd Behavioral Compatibility
All per-item-type behaviors from fabric-cicd are now matched:
.children/KQL Database discovery under Eventhouses.pbi/directory exclusion from definitions- Notebook part ordering (
.pybefore.json) - Report
byPath→byConnectionautomatic transformation creationPayloadfrom.platformmetadata (fallback)SparkJobDefinitionV2format auto-detectionItemDisplayNameNotAvailableYetretry (up to 5 minutes)- Lakehouse
enableSchemasinference fromlakehouse.metadata.json - Shortcut self-reference resolution (lakehouse GUID, not workspace ID)
.platformincluded in definition parts but excluded from content hash (preserves idempotency)- Binary file graceful handling in parameter substitution
Documentation
- New "Why fabio?" section in README comparing against Fabric CLI and fabric-cicd
- Updated AGENTS.md with all new deploy behaviors and decisions
- Added
serde_yamldependency for YAML config file support
Testing
- 690 unit tests (9 new for deploy compatibility)
- 11 E2E tests validating against fabric-cicd's sample workspace
- Verified against live tenant: deployed items from microsoft/fabric-toolbox scenarios
Stats
- 13 commits, 3 new modules (
config.rs,folders.rs,git_diff.rs) - ~2,500 lines added across deploy module
- 12 new CLI flags on
deploy plan/apply
Full Changelog: v0.21.0...v0.22.0
Full Changelog: v0.21.0...v0.22.0