fabric-vibecoding-settings 0.1__tar.gz
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.
- fabric_vibecoding_settings-0.1/.gitignore +59 -0
- fabric_vibecoding_settings-0.1/LICENSE +21 -0
- fabric_vibecoding_settings-0.1/PKG-INFO +219 -0
- fabric_vibecoding_settings-0.1/README.md +199 -0
- fabric_vibecoding_settings-0.1/cli/profiles/claude/CLAUDE.md +49 -0
- fabric_vibecoding_settings-0.1/cli/profiles/claude/agents/developer.md +68 -0
- fabric_vibecoding_settings-0.1/cli/profiles/claude/agents/operator.md +95 -0
- fabric_vibecoding_settings-0.1/cli/profiles/claude/agents/orchestrator.md +40 -0
- fabric_vibecoding_settings-0.1/cli/profiles/claude/agents/tester.md +46 -0
- fabric_vibecoding_settings-0.1/cli/profiles/claude/settings.local.json +67 -0
- fabric_vibecoding_settings-0.1/cli/profiles/codex/AGENTS.md +49 -0
- fabric_vibecoding_settings-0.1/cli/profiles/codex/agents/developer.toml +18 -0
- fabric_vibecoding_settings-0.1/cli/profiles/codex/agents/operator.toml +28 -0
- fabric_vibecoding_settings-0.1/cli/profiles/codex/agents/orchestrator.toml +22 -0
- fabric_vibecoding_settings-0.1/cli/profiles/codex/agents/tester.toml +6 -0
- fabric_vibecoding_settings-0.1/cli/profiles/codex/config.toml +21 -0
- fabric_vibecoding_settings-0.1/cli/profiles/shared/.env.example +20 -0
- fabric_vibecoding_settings-0.1/cli/profiles/shared/.gitignore.fragment +14 -0
- fabric_vibecoding_settings-0.1/cli/profiles/shared/scaffold/data/sandbox/.gitkeep +0 -0
- fabric_vibecoding_settings-0.1/cli/profiles/shared/scaffold/workspace/.gitkeep +0 -0
- fabric_vibecoding_settings-0.1/cli/setup/setup.ps1 +259 -0
- fabric_vibecoding_settings-0.1/cli/setup/setup.sh +282 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/__init__.py +17 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/__main__.py +7 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/cli.py +162 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/commands/__init__.py +1 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/commands/_common.py +113 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/commands/check.py +23 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/commands/install.py +35 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/commands/refresh.py +29 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/core/__init__.py +10 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/core/bootstrap.py +23 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/core/files.py +97 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/core/gitignore.py +57 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/core/markers.py +98 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/core/paths.py +40 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/core/profiles.py +51 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/core/version_check.py +136 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/logging_config.py +43 -0
- fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/runtime_cli.py +200 -0
- fabric_vibecoding_settings-0.1/cli/tools/lakehouse/list-tables.py +298 -0
- fabric_vibecoding_settings-0.1/cli/tools/lint/__init__.py +30 -0
- fabric_vibecoding_settings-0.1/cli/tools/lint/__main__.py +55 -0
- fabric_vibecoding_settings-0.1/cli/tools/lint/core.py +92 -0
- fabric_vibecoding_settings-0.1/cli/tools/lint/de_faker_seed.py +87 -0
- fabric_vibecoding_settings-0.1/cli/tools/lint/sec_no_hardcoded_secrets.py +99 -0
- fabric_vibecoding_settings-0.1/cli/tools/notebook/build.py +318 -0
- fabric_vibecoding_settings-0.1/cli/tools/notebook/deploy.py +419 -0
- fabric_vibecoding_settings-0.1/cli/tools/notebook/smoke-test.ps1 +61 -0
- fabric_vibecoding_settings-0.1/cli/tools/notebook/smoke-test.sh +68 -0
- fabric_vibecoding_settings-0.1/cli/tools/pipeline/manage.py +588 -0
- fabric_vibecoding_settings-0.1/cli/tools/precommit/__init__.py +1 -0
- fabric_vibecoding_settings-0.1/cli/tools/precommit/pre-commit-check.ps1 +25 -0
- fabric_vibecoding_settings-0.1/cli/tools/precommit/pre-commit-check.sh +33 -0
- fabric_vibecoding_settings-0.1/cli/tools/workspace/init.py +179 -0
- fabric_vibecoding_settings-0.1/cli/tools/workspace/pick.py +89 -0
- fabric_vibecoding_settings-0.1/cli/tools/workspace/switch.py +147 -0
- fabric_vibecoding_settings-0.1/cli/tools/workspace/transfer.py +253 -0
- fabric_vibecoding_settings-0.1/pyproject.toml +60 -0
- fabric_vibecoding_settings-0.1/server/.dockerignore +23 -0
- fabric_vibecoding_settings-0.1/server/Dockerfile +46 -0
- fabric_vibecoding_settings-0.1/server/__init__.py +14 -0
- fabric_vibecoding_settings-0.1/server/__main__.py +29 -0
- fabric_vibecoding_settings-0.1/server/app.py +49 -0
- fabric_vibecoding_settings-0.1/server/audit.py +85 -0
- fabric_vibecoding_settings-0.1/server/builders/build-agent-capability-graph.py +99 -0
- fabric_vibecoding_settings-0.1/server/builders/build-graph.py +133 -0
- fabric_vibecoding_settings-0.1/server/builders/graph_build/__init__.py +9 -0
- fabric_vibecoding_settings-0.1/server/builders/graph_build/agent_capabilities.py +200 -0
- fabric_vibecoding_settings-0.1/server/builders/graph_build/visualize.py +1316 -0
- fabric_vibecoding_settings-0.1/server/content/diagnostics/smoke-test-diagnostics.md +26 -0
- fabric_vibecoding_settings-0.1/server/content/entry.md +34 -0
- fabric_vibecoding_settings-0.1/server/content/indexes/skills-index.md +39 -0
- fabric_vibecoding_settings-0.1/server/content/integrations/rtk.md +17 -0
- fabric_vibecoding_settings-0.1/server/content/layout/directory-layout.md +27 -0
- fabric_vibecoding_settings-0.1/server/content/layout/tool-layout.md +37 -0
- fabric_vibecoding_settings-0.1/server/content/rules/data-engineering.md +90 -0
- fabric_vibecoding_settings-0.1/server/content/rules/fabric-platform.md +121 -0
- fabric_vibecoding_settings-0.1/server/content/rules/notebook-authoring.md +58 -0
- fabric_vibecoding_settings-0.1/server/content/rules/security.md +148 -0
- fabric_vibecoding_settings-0.1/server/content/semantic/semantic-models.md +29 -0
- fabric_vibecoding_settings-0.1/server/content/session/operating-rules.md +26 -0
- fabric_vibecoding_settings-0.1/server/content/session/session-start.md +41 -0
- fabric_vibecoding_settings-0.1/server/content/workflow/notebook-workflow.md +28 -0
- fabric_vibecoding_settings-0.1/server/content/workflow/pipeline-structure.md +42 -0
- fabric_vibecoding_settings-0.1/server/content/workflow/workspace-management.md +45 -0
- fabric_vibecoding_settings-0.1/server/docker-compose.yml +23 -0
- fabric_vibecoding_settings-0.1/server/graph/__init__.py +10 -0
- fabric_vibecoding_settings-0.1/server/graph/builder.py +154 -0
- fabric_vibecoding_settings-0.1/server/graph/extract.py +37 -0
- fabric_vibecoding_settings-0.1/server/graph/lock.py +47 -0
- fabric_vibecoding_settings-0.1/server/graph/schema.py +207 -0
- fabric_vibecoding_settings-0.1/server/graph/search.py +115 -0
- fabric_vibecoding_settings-0.1/server/graph/store.py +109 -0
- fabric_vibecoding_settings-0.1/server/graph/writes.py +392 -0
- fabric_vibecoding_settings-0.1/server/skills/caveman/SKILL.md +74 -0
- fabric_vibecoding_settings-0.1/server/skills/fabric-ingest/SKILL.md +219 -0
- fabric_vibecoding_settings-0.1/server/skills/fabric-model/SKILL.md +91 -0
- fabric_vibecoding_settings-0.1/server/skills/fabric-notebook-loop/SKILL.md +24 -0
- fabric_vibecoding_settings-0.1/server/skills/fabric-notebook-loop/sections/diagnosing-opaque-failures.md +31 -0
- fabric_vibecoding_settings-0.1/server/skills/fabric-notebook-loop/sections/full-example.md +59 -0
- fabric_vibecoding_settings-0.1/server/skills/fabric-notebook-loop/sections/mlflow-platform-limits.md +63 -0
- fabric_vibecoding_settings-0.1/server/skills/fabric-notebook-loop/sections/must.md +26 -0
- fabric_vibecoding_settings-0.1/server/skills/fabric-notebook-loop/sections/prefer-avoid.md +28 -0
- fabric_vibecoding_settings-0.1/server/skills/fabric-notebook-loop/sections/the-loop.md +111 -0
- fabric_vibecoding_settings-0.1/server/skills/fabric-ops/SKILL.md +123 -0
- fabric_vibecoding_settings-0.1/server/skills/fabric-pipeline/SKILL.md +85 -0
- fabric_vibecoding_settings-0.1/server/skills/fabric-transform/SKILL.md +202 -0
- fabric_vibecoding_settings-0.1/server/skills/fabric-validate/SKILL.md +176 -0
- fabric_vibecoding_settings-0.1/server/skills/git-commit/SKILL.md +124 -0
- fabric_vibecoding_settings-0.1/server/skills/grill-me/SKILL.md +10 -0
- fabric_vibecoding_settings-0.1/server/skills/mock-data/SKILL.md +93 -0
- fabric_vibecoding_settings-0.1/server/skills/prd/SKILL.md +143 -0
- fabric_vibecoding_settings-0.1/server/skills/rtk/SKILL.md +31 -0
- fabric_vibecoding_settings-0.1/server/skills/semantic-model/SKILL.md +130 -0
- fabric_vibecoding_settings-0.1/server/tools/__init__.py +3 -0
- fabric_vibecoding_settings-0.1/server/tools/data/__init__.py +1 -0
- fabric_vibecoding_settings-0.1/server/tools/data/mock-data-generator.py +356 -0
- fabric_vibecoding_settings-0.1/server/tools/data/tools.py +63 -0
- fabric_vibecoding_settings-0.1/server/tools/graph/__init__.py +1 -0
- fabric_vibecoding_settings-0.1/server/tools/graph/tools.py +319 -0
- fabric_vibecoding_settings-0.1/server/tools/semantic_model/__init__.py +1 -0
- fabric_vibecoding_settings-0.1/server/tools/semantic_model/inspect.py +352 -0
- fabric_vibecoding_settings-0.1/server/tools/semantic_model/tools.py +53 -0
- fabric_vibecoding_settings-0.1/server/tools/utils/script_runner.py +82 -0
- fabric_vibecoding_settings-0.1/server/tools/validate/__init__.py +1 -0
- fabric_vibecoding_settings-0.1/server/tools/validate/pipeline-lineage.py +134 -0
- fabric_vibecoding_settings-0.1/server/tools/validate/tools.py +119 -0
- fabric_vibecoding_settings-0.1/tests/_validation/__init__.py +10 -0
- fabric_vibecoding_settings-0.1/tests/_validation/agent_guidance.py +268 -0
- fabric_vibecoding_settings-0.1/tests/_validation/install_package.py +288 -0
- fabric_vibecoding_settings-0.1/tests/conftest.py +20 -0
- fabric_vibecoding_settings-0.1/tests/test_agent_capability_graph.py +130 -0
- fabric_vibecoding_settings-0.1/tests/test_agent_guidance.py +14 -0
- fabric_vibecoding_settings-0.1/tests/test_build.py +426 -0
- fabric_vibecoding_settings-0.1/tests/test_extract.py +47 -0
- fabric_vibecoding_settings-0.1/tests/test_graph_builder.py +149 -0
- fabric_vibecoding_settings-0.1/tests/test_graph_search.py +64 -0
- fabric_vibecoding_settings-0.1/tests/test_graph_store.py +93 -0
- fabric_vibecoding_settings-0.1/tests/test_graph_visualize.py +302 -0
- fabric_vibecoding_settings-0.1/tests/test_install_package.py +23 -0
- fabric_vibecoding_settings-0.1/tests/test_layout.py +116 -0
- fabric_vibecoding_settings-0.1/tests/test_lint.py +143 -0
- fabric_vibecoding_settings-0.1/tests/test_local_helper_wrappers.py +150 -0
- fabric_vibecoding_settings-0.1/tests/test_manage.py +388 -0
- fabric_vibecoding_settings-0.1/tests/test_mcp_wrappers.py +73 -0
- fabric_vibecoding_settings-0.1/tests/test_mock_data_generator.py +158 -0
- fabric_vibecoding_settings-0.1/tests/test_profile_entrypoints.py +96 -0
- fabric_vibecoding_settings-0.1/tests/test_semantic_model_inspect.py +297 -0
- fabric_vibecoding_settings-0.1/tests/test_skill_split_coverage.py +124 -0
- fabric_vibecoding_settings-0.1/tests/test_validator_profile_minimal.py +128 -0
- fabric_vibecoding_settings-0.1/tests/test_version_check.py +67 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Environment and local machine state
|
|
2
|
+
.env
|
|
3
|
+
.env.*
|
|
4
|
+
!.env.example
|
|
5
|
+
*.local.json
|
|
6
|
+
!profiles/claude/settings.local.json
|
|
7
|
+
!cli/profiles/claude/settings.local.json
|
|
8
|
+
|
|
9
|
+
# Local Claude Code overrides
|
|
10
|
+
.claude/settings.local.json
|
|
11
|
+
|
|
12
|
+
# Data and generated runtime artifacts do not belong in this source package
|
|
13
|
+
logs/
|
|
14
|
+
src/
|
|
15
|
+
!cli/src/
|
|
16
|
+
fabric_notebooks/
|
|
17
|
+
_delta_log/
|
|
18
|
+
*.checkpoint.parquet
|
|
19
|
+
*.parquet
|
|
20
|
+
*.csv
|
|
21
|
+
*.xlsx
|
|
22
|
+
*.xls
|
|
23
|
+
!tool/data/
|
|
24
|
+
!tool/data/mock-data-generator.py
|
|
25
|
+
|
|
26
|
+
# Allow packaged target scaffolding placeholders under profiles/shared/scaffold
|
|
27
|
+
!profiles/shared/scaffold/data/
|
|
28
|
+
!profiles/shared/scaffold/data/sandbox/
|
|
29
|
+
!profiles/shared/scaffold/data/sandbox/.gitkeep
|
|
30
|
+
!profiles/shared/scaffold/workspace/
|
|
31
|
+
!profiles/shared/scaffold/workspace/.gitkeep
|
|
32
|
+
|
|
33
|
+
# Folder-redesign baseline snapshot (Step 0)
|
|
34
|
+
baseline-snapshot/
|
|
35
|
+
|
|
36
|
+
# Python
|
|
37
|
+
__pycache__/
|
|
38
|
+
*.pyc
|
|
39
|
+
*.pyo
|
|
40
|
+
*.pyd
|
|
41
|
+
.Python
|
|
42
|
+
*.egg-info/
|
|
43
|
+
dist/
|
|
44
|
+
.venv/
|
|
45
|
+
venv/
|
|
46
|
+
|
|
47
|
+
# Memory — runtime memory is persisted via the graph MCP CRUD ops
|
|
48
|
+
memory/*.md
|
|
49
|
+
|
|
50
|
+
# Knowledge graph build artifacts (rebuilt by server/builders/build-graph.py)
|
|
51
|
+
dist/.graph/
|
|
52
|
+
|
|
53
|
+
# OS / IDE
|
|
54
|
+
.DS_Store
|
|
55
|
+
Thumbs.db
|
|
56
|
+
.vscode/
|
|
57
|
+
.idea/
|
|
58
|
+
*.swp
|
|
59
|
+
.pytest_cache/
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Silvio Cardoso
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: fabric-vibecoding-settings
|
|
3
|
+
Version: 0.1
|
|
4
|
+
Summary: Install Microsoft Fabric agent profiles (Claude Code and Codex) into a target repository.
|
|
5
|
+
License: MIT
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Requires-Python: >=3.10
|
|
8
|
+
Requires-Dist: rich>=13.7
|
|
9
|
+
Requires-Dist: typer>=0.12
|
|
10
|
+
Provides-Extra: graph
|
|
11
|
+
Requires-Dist: networkx>=3.2; extra == 'graph'
|
|
12
|
+
Requires-Dist: rank-bm25>=0.2.2; extra == 'graph'
|
|
13
|
+
Provides-Extra: server
|
|
14
|
+
Requires-Dist: mcp>=1.0; extra == 'server'
|
|
15
|
+
Requires-Dist: networkx>=3.2; extra == 'server'
|
|
16
|
+
Requires-Dist: pydantic>=2.7; extra == 'server'
|
|
17
|
+
Requires-Dist: rank-bm25>=0.2.2; extra == 'server'
|
|
18
|
+
Requires-Dist: uvicorn>=0.30; extra == 'server'
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
|
|
21
|
+
# Fabric Agent Pack
|
|
22
|
+
|
|
23
|
+
Vendor-native **Codex** and **Claude Code** profiles for Microsoft Fabric data engineering.
|
|
24
|
+
|
|
25
|
+
Fabric Agent Pack turns a normal git repository into a guided Microsoft Fabric project workspace. It installs agent instructions and lightweight scaffold files, while `fabric-vibe` provides the setup, validation, notebook, pipeline, lakehouse, and workspace helpers from the package.
|
|
26
|
+
|
|
27
|
+
> This repository is the **source package and installer**, not the day-to-day Fabric project workspace. Install a profile into your actual project repository, then run Codex or Claude Code from that target repository root.
|
|
28
|
+
|
|
29
|
+
**Overview**
|
|
30
|
+
|
|
31
|
+

|
|
32
|
+
|
|
33
|
+
## Quick start
|
|
34
|
+
|
|
35
|
+
The CLI is published as `fabric-vibecoding-settings` on PyPI. Installing it puts two console scripts on your PATH:
|
|
36
|
+
|
|
37
|
+
| Command | Role |
|
|
38
|
+
|---|---|
|
|
39
|
+
| `fabric-vibecoding-agents` | Install / check / refresh agent profiles in a project repo |
|
|
40
|
+
| `fabric-vibe` | Daily Fabric helpers run from a project repo (notebook, pipeline, lakehouse, workspace, lint, precommit) |
|
|
41
|
+
|
|
42
|
+
### Step 1 — Install the CLI
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
uv tool install fabric-vibecoding-settings # recommended
|
|
46
|
+
# or
|
|
47
|
+
pip install fabric-vibecoding-settings
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
### Step 2 — Install a profile into your project repo
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# preview
|
|
55
|
+
fabric-vibecoding-agents install --profile claude --target /path/to/project-repo --dry-run
|
|
56
|
+
|
|
57
|
+
# apply (also runs fabric-vibe setup: ms-fabric-cli + creds + workspaces.json)
|
|
58
|
+
fabric-vibecoding-agents install --profile claude --target /path/to/project-repo
|
|
59
|
+
|
|
60
|
+
# verify drift later
|
|
61
|
+
fabric-vibecoding-agents check --profile claude --target /path/to/project-repo
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`fabric-vibecoding-agents install` copies the profile and scaffold files into the target, then runs `fabric-vibe setup` from the target root to install `ms-fabric-cli`, prompt for `FABRIC_TENANT_ID` / `CLIENT_ID` / `CLIENT_SECRET`, verify auth, and populate `workspaces.json`. Pass `--no-bootstrap` to skip.
|
|
65
|
+
|
|
66
|
+
### Step 3 — Daily work inside the project
|
|
67
|
+
|
|
68
|
+
Once a profile is installed, run the daily helpers via `fabric-vibe` from the project root:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
fabric-vibe notebook build <name>
|
|
72
|
+
fabric-vibe notebook deploy <name> <workspace_id>
|
|
73
|
+
fabric-vibe pipeline manage list
|
|
74
|
+
fabric-vibe lakehouse list-tables
|
|
75
|
+
fabric-vibe workspace switch <displayName>
|
|
76
|
+
fabric-vibe lint
|
|
77
|
+
fabric-vibe precommit
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Each subcommand passes its trailing argv through to package-bundled helpers while preserving the target repo as the working directory. Use `fabric-vibe <group> --help` to see what each helper accepts.
|
|
81
|
+
|
|
82
|
+
### `fabric-vibecoding-agents` flags
|
|
83
|
+
|
|
84
|
+
| Flag | Effect |
|
|
85
|
+
|---|---|
|
|
86
|
+
| `--profile {codex,claude,all}` / `-p` | Pick the agent profile (required) |
|
|
87
|
+
| `--target <path>` / `-t` | Target git repository (required) |
|
|
88
|
+
| `--dry-run` | Preview changes without writing (install/refresh only) |
|
|
89
|
+
| `--force` | Overwrite non-managed existing files |
|
|
90
|
+
| `--backup` | Back up replaced files alongside the originals |
|
|
91
|
+
| `--no-bootstrap` | Copy files only; skip the post-install Fabric auth + workspaces.json bootstrap (install only) |
|
|
92
|
+
| `--verbose` / `-v` | Debug-level logging |
|
|
93
|
+
| `--quiet` / `-q` | Suppress info logging |
|
|
94
|
+
| `--help` / `-h` | Show usage |
|
|
95
|
+
|
|
96
|
+
### Service-principal credentials
|
|
97
|
+
|
|
98
|
+
Minimum Fabric workspace role: **Contributor**. The bootstrap prompts for these and stores them safely:
|
|
99
|
+
|
|
100
|
+
| Prompt | Stored where |
|
|
101
|
+
|---|---|
|
|
102
|
+
| `FABRIC_TENANT_ID` | `<target>/.env` |
|
|
103
|
+
| `FABRIC_CLIENT_ID` | `<target>/.env` |
|
|
104
|
+
| `FABRIC_CLIENT_SECRET` | OS environment only — never `.env` |
|
|
105
|
+
|
|
106
|
+
On Windows the secret is written to the user registry via `SetEnvironmentVariable("User")`. On Linux/macOS it is appended to your shell profile (`~/.zprofile`, `~/.bash_profile`, or `~/.profile`).
|
|
107
|
+
|
|
108
|
+
Create the service principal once, before running setup:
|
|
109
|
+
|
|
110
|
+
```text
|
|
111
|
+
Azure Portal → App registrations → New registration
|
|
112
|
+
Name: fabric-agent-<project>
|
|
113
|
+
Supported account types: this tenant only
|
|
114
|
+
|
|
115
|
+
Fabric workspace → Manage access → Add → service principal
|
|
116
|
+
Role: Contributor
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Re-running the same install command is idempotent — credentials already set are skipped, and managed files only change when their source content changes. If you need to bootstrap again later (e.g. after rotating the secret), run `fabric-vibe setup` from inside the target.
|
|
120
|
+
|
|
121
|
+
## Docker image
|
|
122
|
+
|
|
123
|
+
The Fabric MCP server is also published as a Docker image on Docker Hub:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
docker pull silviocardoso/fabric-vibecoding-mcp-server:latest
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Image page: [silviocardoso/fabric-vibecoding-mcp-server](https://hub.docker.com/r/silviocardoso/fabric-vibecoding-mcp-server)
|
|
130
|
+
|
|
131
|
+
The image builds from `server/Dockerfile` and includes the server-side MCP tools plus the baked knowledge-graph artifacts. Use it when you want to run the MCP server from a published image instead of building it locally with `docker compose up --build`.
|
|
132
|
+
|
|
133
|
+
Minimal `docker-compose.yml` using the published image:
|
|
134
|
+
|
|
135
|
+
```yaml
|
|
136
|
+
services:
|
|
137
|
+
server:
|
|
138
|
+
image: silviocardoso/fabric-vibecoding-mcp-server:latest
|
|
139
|
+
container_name: fabric-mcp-server
|
|
140
|
+
environment:
|
|
141
|
+
PORT: "8000"
|
|
142
|
+
HOST: "0.0.0.0"
|
|
143
|
+
LOG_LEVEL: ${LOG_LEVEL:-info}
|
|
144
|
+
ports:
|
|
145
|
+
- "127.0.0.1:8000:8000"
|
|
146
|
+
restart: unless-stopped
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Then start it with:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
docker compose up
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
This binds the server to `127.0.0.1:8000`, so it is reachable from your machine without exposing it to the LAN.
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
## Learn more
|
|
159
|
+
|
|
160
|
+
- [docs/workflow.md](docs/workflow.md) — agent → skill → tool → Fabric flow, focused on what you get in the target repo.
|
|
161
|
+
- [docs/knowledge-graph.md](docs/knowledge-graph.md) — what's indexed under `memory/` and the `graph_*` MCP surface the agents call.
|
|
162
|
+
- [docs/architecture.md](docs/architecture.md) — full source-vs-target picture: MCP servers, folder layout, setup CLI, and the redesign migration notes.
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
## Example result
|
|
166
|
+
|
|
167
|
+
The screenshots below show an end-to-end bronze ingestion of EU day-ahead electricity prices into a Fabric Lakehouse.
|
|
168
|
+
|
|
169
|
+
**1 — Authoring the bronze notebook**
|
|
170
|
+
|
|
171
|
+
The developer agent authors `bronze_electricity_day_ahead_prices.py` while the upstream `download_sources` job runs in Fabric.
|
|
172
|
+
|
|
173
|
+

|
|
174
|
+
|
|
175
|
+
**2 — Deploying and triggering**
|
|
176
|
+
|
|
177
|
+
Codex reads the workspace ID from `.env`, deploys the notebook through the Fabric REST API, and triggers the run.
|
|
178
|
+
|
|
179
|
+

|
|
180
|
+
|
|
181
|
+
**3 — Full run history**
|
|
182
|
+
|
|
183
|
+
The Fabric Monitor shows `download_sources` → `bronze_electricity_day_ahead_prices` → `dq_bronze_electricity_day_ahead_prices` succeeding after schema-contract iterations.
|
|
184
|
+
|
|
185
|
+

|
|
186
|
+
|
|
187
|
+
**4 — Ingested Delta table**
|
|
188
|
+
|
|
189
|
+
The resulting Delta table contains 1,000 rows and 27 columns, including lineage envelope fields such as `_ingest_timestamp`, `_source_system`, and `_batch_id`.
|
|
190
|
+
|
|
191
|
+

|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
**5 — Restricted workspace for AI agentic development**
|
|
195
|
+
|
|
196
|
+
The agent runs in a dedicated workspace. Permissions are set at the workspace level to ensure there is no access to production data or pipelines.
|
|
197
|
+
|
|
198
|
+

|
|
199
|
+
|
|
200
|
+
**6 — Development Lifecycle**
|
|
201
|
+
|
|
202
|
+
The code is integrated with Git, and the agent develops everything in a dedicated feature branch. Human developers can review the pull request later and merge the work from the feature branch into dev.
|
|
203
|
+
|
|
204
|
+

|
|
205
|
+
|
|
206
|
+
> **Note**: The VIBECODING workspace was set up by selecting individual Fabric items. This narrowed down the codebase to only the scripts that stakeholders actually care about.
|
|
207
|
+
|
|
208
|
+
## Live reference implementation
|
|
209
|
+
|
|
210
|
+
[**fabric-open-data-lu**](https://github.com/scardoso-lu/fabric-open-data-lu) is a public target repository with Claude- and Codex-generated scripts for EU open-data ingestion into Microsoft Fabric. It demonstrates the `download_` → `bronze_` → `dq_bronze_` notebook pattern used by this package.
|
|
211
|
+
|
|
212
|
+
## Why use it?
|
|
213
|
+
|
|
214
|
+
- **Ship faster** — agents handle notebook authoring, deployment, schema validation, and pipeline wiring. Engineers own approvals and production handoffs.
|
|
215
|
+
- **OWASP-compliant by default** — Data Security Top 10 and Supply Chain (A03:2025) baked in: no credential leakage, parameterized queries, pinned dependencies, CVE checks, PII masking.
|
|
216
|
+
- **Harness engineering** — agents run inside a structured harness of guardrails, role definitions, skill boundaries, and memory. Consistent, auditable behavior without custom prompt engineering per project.
|
|
217
|
+
- **Separation of duties** — implementation, testing, and security review are distinct agents. Nothing reaches production without a human sign-off.
|
|
218
|
+
- **Quality gates at every layer** — mandatory Great Expectations checks at bronze, silver, and gold. Failed DQ stops the pipeline; agents do not auto-retry.
|
|
219
|
+
- **Token savings** — RTK optimizer cuts shell-output tokens 60–90%, keeping long sessions economical.
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# Fabric Agent Pack
|
|
2
|
+
|
|
3
|
+
Vendor-native **Codex** and **Claude Code** profiles for Microsoft Fabric data engineering.
|
|
4
|
+
|
|
5
|
+
Fabric Agent Pack turns a normal git repository into a guided Microsoft Fabric project workspace. It installs agent instructions and lightweight scaffold files, while `fabric-vibe` provides the setup, validation, notebook, pipeline, lakehouse, and workspace helpers from the package.
|
|
6
|
+
|
|
7
|
+
> This repository is the **source package and installer**, not the day-to-day Fabric project workspace. Install a profile into your actual project repository, then run Codex or Claude Code from that target repository root.
|
|
8
|
+
|
|
9
|
+
**Overview**
|
|
10
|
+
|
|
11
|
+

|
|
12
|
+
|
|
13
|
+
## Quick start
|
|
14
|
+
|
|
15
|
+
The CLI is published as `fabric-vibecoding-settings` on PyPI. Installing it puts two console scripts on your PATH:
|
|
16
|
+
|
|
17
|
+
| Command | Role |
|
|
18
|
+
|---|---|
|
|
19
|
+
| `fabric-vibecoding-agents` | Install / check / refresh agent profiles in a project repo |
|
|
20
|
+
| `fabric-vibe` | Daily Fabric helpers run from a project repo (notebook, pipeline, lakehouse, workspace, lint, precommit) |
|
|
21
|
+
|
|
22
|
+
### Step 1 — Install the CLI
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
uv tool install fabric-vibecoding-settings # recommended
|
|
26
|
+
# or
|
|
27
|
+
pip install fabric-vibecoding-settings
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
### Step 2 — Install a profile into your project repo
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# preview
|
|
35
|
+
fabric-vibecoding-agents install --profile claude --target /path/to/project-repo --dry-run
|
|
36
|
+
|
|
37
|
+
# apply (also runs fabric-vibe setup: ms-fabric-cli + creds + workspaces.json)
|
|
38
|
+
fabric-vibecoding-agents install --profile claude --target /path/to/project-repo
|
|
39
|
+
|
|
40
|
+
# verify drift later
|
|
41
|
+
fabric-vibecoding-agents check --profile claude --target /path/to/project-repo
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
`fabric-vibecoding-agents install` copies the profile and scaffold files into the target, then runs `fabric-vibe setup` from the target root to install `ms-fabric-cli`, prompt for `FABRIC_TENANT_ID` / `CLIENT_ID` / `CLIENT_SECRET`, verify auth, and populate `workspaces.json`. Pass `--no-bootstrap` to skip.
|
|
45
|
+
|
|
46
|
+
### Step 3 — Daily work inside the project
|
|
47
|
+
|
|
48
|
+
Once a profile is installed, run the daily helpers via `fabric-vibe` from the project root:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
fabric-vibe notebook build <name>
|
|
52
|
+
fabric-vibe notebook deploy <name> <workspace_id>
|
|
53
|
+
fabric-vibe pipeline manage list
|
|
54
|
+
fabric-vibe lakehouse list-tables
|
|
55
|
+
fabric-vibe workspace switch <displayName>
|
|
56
|
+
fabric-vibe lint
|
|
57
|
+
fabric-vibe precommit
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Each subcommand passes its trailing argv through to package-bundled helpers while preserving the target repo as the working directory. Use `fabric-vibe <group> --help` to see what each helper accepts.
|
|
61
|
+
|
|
62
|
+
### `fabric-vibecoding-agents` flags
|
|
63
|
+
|
|
64
|
+
| Flag | Effect |
|
|
65
|
+
|---|---|
|
|
66
|
+
| `--profile {codex,claude,all}` / `-p` | Pick the agent profile (required) |
|
|
67
|
+
| `--target <path>` / `-t` | Target git repository (required) |
|
|
68
|
+
| `--dry-run` | Preview changes without writing (install/refresh only) |
|
|
69
|
+
| `--force` | Overwrite non-managed existing files |
|
|
70
|
+
| `--backup` | Back up replaced files alongside the originals |
|
|
71
|
+
| `--no-bootstrap` | Copy files only; skip the post-install Fabric auth + workspaces.json bootstrap (install only) |
|
|
72
|
+
| `--verbose` / `-v` | Debug-level logging |
|
|
73
|
+
| `--quiet` / `-q` | Suppress info logging |
|
|
74
|
+
| `--help` / `-h` | Show usage |
|
|
75
|
+
|
|
76
|
+
### Service-principal credentials
|
|
77
|
+
|
|
78
|
+
Minimum Fabric workspace role: **Contributor**. The bootstrap prompts for these and stores them safely:
|
|
79
|
+
|
|
80
|
+
| Prompt | Stored where |
|
|
81
|
+
|---|---|
|
|
82
|
+
| `FABRIC_TENANT_ID` | `<target>/.env` |
|
|
83
|
+
| `FABRIC_CLIENT_ID` | `<target>/.env` |
|
|
84
|
+
| `FABRIC_CLIENT_SECRET` | OS environment only — never `.env` |
|
|
85
|
+
|
|
86
|
+
On Windows the secret is written to the user registry via `SetEnvironmentVariable("User")`. On Linux/macOS it is appended to your shell profile (`~/.zprofile`, `~/.bash_profile`, or `~/.profile`).
|
|
87
|
+
|
|
88
|
+
Create the service principal once, before running setup:
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
Azure Portal → App registrations → New registration
|
|
92
|
+
Name: fabric-agent-<project>
|
|
93
|
+
Supported account types: this tenant only
|
|
94
|
+
|
|
95
|
+
Fabric workspace → Manage access → Add → service principal
|
|
96
|
+
Role: Contributor
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Re-running the same install command is idempotent — credentials already set are skipped, and managed files only change when their source content changes. If you need to bootstrap again later (e.g. after rotating the secret), run `fabric-vibe setup` from inside the target.
|
|
100
|
+
|
|
101
|
+
## Docker image
|
|
102
|
+
|
|
103
|
+
The Fabric MCP server is also published as a Docker image on Docker Hub:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
docker pull silviocardoso/fabric-vibecoding-mcp-server:latest
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Image page: [silviocardoso/fabric-vibecoding-mcp-server](https://hub.docker.com/r/silviocardoso/fabric-vibecoding-mcp-server)
|
|
110
|
+
|
|
111
|
+
The image builds from `server/Dockerfile` and includes the server-side MCP tools plus the baked knowledge-graph artifacts. Use it when you want to run the MCP server from a published image instead of building it locally with `docker compose up --build`.
|
|
112
|
+
|
|
113
|
+
Minimal `docker-compose.yml` using the published image:
|
|
114
|
+
|
|
115
|
+
```yaml
|
|
116
|
+
services:
|
|
117
|
+
server:
|
|
118
|
+
image: silviocardoso/fabric-vibecoding-mcp-server:latest
|
|
119
|
+
container_name: fabric-mcp-server
|
|
120
|
+
environment:
|
|
121
|
+
PORT: "8000"
|
|
122
|
+
HOST: "0.0.0.0"
|
|
123
|
+
LOG_LEVEL: ${LOG_LEVEL:-info}
|
|
124
|
+
ports:
|
|
125
|
+
- "127.0.0.1:8000:8000"
|
|
126
|
+
restart: unless-stopped
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Then start it with:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
docker compose up
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
This binds the server to `127.0.0.1:8000`, so it is reachable from your machine without exposing it to the LAN.
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
## Learn more
|
|
139
|
+
|
|
140
|
+
- [docs/workflow.md](docs/workflow.md) — agent → skill → tool → Fabric flow, focused on what you get in the target repo.
|
|
141
|
+
- [docs/knowledge-graph.md](docs/knowledge-graph.md) — what's indexed under `memory/` and the `graph_*` MCP surface the agents call.
|
|
142
|
+
- [docs/architecture.md](docs/architecture.md) — full source-vs-target picture: MCP servers, folder layout, setup CLI, and the redesign migration notes.
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
## Example result
|
|
146
|
+
|
|
147
|
+
The screenshots below show an end-to-end bronze ingestion of EU day-ahead electricity prices into a Fabric Lakehouse.
|
|
148
|
+
|
|
149
|
+
**1 — Authoring the bronze notebook**
|
|
150
|
+
|
|
151
|
+
The developer agent authors `bronze_electricity_day_ahead_prices.py` while the upstream `download_sources` job runs in Fabric.
|
|
152
|
+
|
|
153
|
+

|
|
154
|
+
|
|
155
|
+
**2 — Deploying and triggering**
|
|
156
|
+
|
|
157
|
+
Codex reads the workspace ID from `.env`, deploys the notebook through the Fabric REST API, and triggers the run.
|
|
158
|
+
|
|
159
|
+

|
|
160
|
+
|
|
161
|
+
**3 — Full run history**
|
|
162
|
+
|
|
163
|
+
The Fabric Monitor shows `download_sources` → `bronze_electricity_day_ahead_prices` → `dq_bronze_electricity_day_ahead_prices` succeeding after schema-contract iterations.
|
|
164
|
+
|
|
165
|
+

|
|
166
|
+
|
|
167
|
+
**4 — Ingested Delta table**
|
|
168
|
+
|
|
169
|
+
The resulting Delta table contains 1,000 rows and 27 columns, including lineage envelope fields such as `_ingest_timestamp`, `_source_system`, and `_batch_id`.
|
|
170
|
+
|
|
171
|
+

|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
**5 — Restricted workspace for AI agentic development**
|
|
175
|
+
|
|
176
|
+
The agent runs in a dedicated workspace. Permissions are set at the workspace level to ensure there is no access to production data or pipelines.
|
|
177
|
+
|
|
178
|
+

|
|
179
|
+
|
|
180
|
+
**6 — Development Lifecycle**
|
|
181
|
+
|
|
182
|
+
The code is integrated with Git, and the agent develops everything in a dedicated feature branch. Human developers can review the pull request later and merge the work from the feature branch into dev.
|
|
183
|
+
|
|
184
|
+

|
|
185
|
+
|
|
186
|
+
> **Note**: The VIBECODING workspace was set up by selecting individual Fabric items. This narrowed down the codebase to only the scripts that stakeholders actually care about.
|
|
187
|
+
|
|
188
|
+
## Live reference implementation
|
|
189
|
+
|
|
190
|
+
[**fabric-open-data-lu**](https://github.com/scardoso-lu/fabric-open-data-lu) is a public target repository with Claude- and Codex-generated scripts for EU open-data ingestion into Microsoft Fabric. It demonstrates the `download_` → `bronze_` → `dq_bronze_` notebook pattern used by this package.
|
|
191
|
+
|
|
192
|
+
## Why use it?
|
|
193
|
+
|
|
194
|
+
- **Ship faster** — agents handle notebook authoring, deployment, schema validation, and pipeline wiring. Engineers own approvals and production handoffs.
|
|
195
|
+
- **OWASP-compliant by default** — Data Security Top 10 and Supply Chain (A03:2025) baked in: no credential leakage, parameterized queries, pinned dependencies, CVE checks, PII masking.
|
|
196
|
+
- **Harness engineering** — agents run inside a structured harness of guardrails, role definitions, skill boundaries, and memory. Consistent, auditable behavior without custom prompt engineering per project.
|
|
197
|
+
- **Separation of duties** — implementation, testing, and security review are distinct agents. Nothing reaches production without a human sign-off.
|
|
198
|
+
- **Quality gates at every layer** — mandatory Great Expectations checks at bronze, silver, and gold. Failed DQ stops the pipeline; agents do not auto-retry.
|
|
199
|
+
- **Token savings** — RTK optimizer cuts shell-output tokens 60–90%, keeping long sessions economical.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Microsoft Fabric Data Engineering — Claude Code Profile
|
|
2
|
+
|
|
3
|
+
You are a Fabric engineering agent operating inside this repository.
|
|
4
|
+
|
|
5
|
+
You know NOTHING about this project except how to call the graph tool.
|
|
6
|
+
All project knowledge — the mandatory setup gate, operating rules,
|
|
7
|
+
pipeline structure, skills, agents, semantic models, memory, and
|
|
8
|
+
per-topic context — lives in a knowledge graph. You MUST discover what
|
|
9
|
+
you need by traversing the graph. Do not read project markdown files
|
|
10
|
+
directly; use the graph.
|
|
11
|
+
|
|
12
|
+
## How to work
|
|
13
|
+
|
|
14
|
+
The `fabric-server` MCP is a separate process — a Docker container the
|
|
15
|
+
human starts with `docker compose up` from the source repo's `server/`
|
|
16
|
+
directory before opening Claude. The project MCP config generated by
|
|
17
|
+
`fabric-vibe setup` points clients to its Fabric and graph tools. If
|
|
18
|
+
`tools/list` returns nothing the container probably isn't running.
|
|
19
|
+
|
|
20
|
+
1. Call the Fabric graph MCP `graph_get_entry` tool first, before any
|
|
21
|
+
other action. In Codex this is exposed as
|
|
22
|
+
`mcp__fabric_server__.graph_get_entry`; in clients that flatten MCP
|
|
23
|
+
names, use the equivalent `fabric-server` `graph_get_entry` tool.
|
|
24
|
+
The returned node is the mandatory setup gate. Follow it literally
|
|
25
|
+
— do not start any Fabric task until every gate check passes.
|
|
26
|
+
2. If the current node does not answer the user's question, call
|
|
27
|
+
`graph_get_linked` with that node's id to see its neighbors.
|
|
28
|
+
Choose one and call `graph_get_node`.
|
|
29
|
+
3. You may only navigate to node ids returned by `graph_get_entry`,
|
|
30
|
+
`graph_get_linked`, or `graph_search`. Never guess or hallucinate
|
|
31
|
+
a node id.
|
|
32
|
+
4. Use `graph_search` only when no linked node looks relevant and a
|
|
33
|
+
fresh entry point is needed.
|
|
34
|
+
5. When the answer is in hand, cite the node ids you sourced from
|
|
35
|
+
(e.g. "per `graph-content/workflow/pipeline-structure` and
|
|
36
|
+
`skill-fixes/silver-do-not-trust-bronze-types`").
|
|
37
|
+
6. To author or modify a knowledge node, use `graph_create_node` /
|
|
38
|
+
`graph_update_node` / `graph_add_edge` rather than direct file
|
|
39
|
+
edits. To remove graph knowledge, use `graph_delete_node` /
|
|
40
|
+
`graph_remove_edge` only when explicitly asked.
|
|
41
|
+
|
|
42
|
+
## Tool surface
|
|
43
|
+
|
|
44
|
+
`fabric-server` MCP: `graph_get_entry`/`get_node`/`get_linked`/`search`/`list_kinds`,
|
|
45
|
+
`graph_create_node`/`update_node`/`delete_node`/`add_edge`/`remove_edge` (atomic),
|
|
46
|
+
`pipeline_lineage_check`, `data_mock_generate`, `semantic_model_list`/`_show`.
|
|
47
|
+
Bash: `fabric-vibe` proxies every package-owned helper —
|
|
48
|
+
`notebook {build,deploy,smoke-test}`, `pipeline manage`, `lakehouse list-tables`,
|
|
49
|
+
`workspace {init,switch,transfer,pick}`, `lint`, `precommit`. Use `--help` for argv.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: developer
|
|
3
|
+
description: Implement Microsoft Fabric PySpark, SQL, notebook, pipeline, and repo maintenance work.
|
|
4
|
+
links:
|
|
5
|
+
- skills/fabric-ingest
|
|
6
|
+
- skills/fabric-transform
|
|
7
|
+
- skills/fabric-model
|
|
8
|
+
- skills/fabric-notebook-loop
|
|
9
|
+
- skills/fabric-pipeline
|
|
10
|
+
- rules/notebook-authoring
|
|
11
|
+
- rules/data-engineering
|
|
12
|
+
- rules/security
|
|
13
|
+
tools:
|
|
14
|
+
- Read
|
|
15
|
+
- Write
|
|
16
|
+
- Edit
|
|
17
|
+
- Bash
|
|
18
|
+
- Glob
|
|
19
|
+
- Grep
|
|
20
|
+
skills:
|
|
21
|
+
- fabric-ingest
|
|
22
|
+
- fabric-transform
|
|
23
|
+
- fabric-model
|
|
24
|
+
- fabric-notebook-loop
|
|
25
|
+
- fabric-ops
|
|
26
|
+
- fabric-pipeline
|
|
27
|
+
- git-commit
|
|
28
|
+
- mock-data
|
|
29
|
+
- semantic-model
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
# Developer
|
|
33
|
+
|
|
34
|
+
Work from this repository root. Discover project context through the knowledge graph: call `graph_get_entry`, follow `graph_get_linked` to relevant rules, fetch the matching workflow with `graph_get_node('skills/<name>')`, and use `graph_search` for topic-specific state. There is no `memory/project.md` — persistent project state lives as graph nodes; read and write them via the `graph_*` MCP tools only.
|
|
35
|
+
|
|
36
|
+
## Tool surface
|
|
37
|
+
|
|
38
|
+
- **Knowledge graph (MCP)**: `graph_get_entry`, `graph_get_node`, `graph_get_linked`, `graph_search`, `graph_create_node`, `graph_update_node`, `graph_add_edge`. Persist completed work via `graph_create_node` / `graph_update_node` (kind `memory`).
|
|
39
|
+
- **Server-side helpers (MCP)**: `pipeline_lineage_check`, `data_mock_generate`, `semantic_model_list`, `semantic_model_show`. The server has no filesystem access to your project — `pipeline_lineage_check` requires uploading notebook contents as `{relative_path: file_content}`; `data_mock_generate` takes a `target_dir` mounted into the container.
|
|
40
|
+
- **Package-owned helpers (Bash)**: all local helpers go through the `fabric-vibe` proxy, invoked from the project root. Fabric helper commands that talk to Fabric require `ms-fabric-cli` (`uv tool install ms-fabric-cli`) and read SPN credentials from `.env` + OS environment:
|
|
41
|
+
- `fabric-vibe notebook build` — build .Notebook bundles from `workspace/<topic>/<name>.py`.
|
|
42
|
+
- `fabric-vibe notebook deploy {deploy|run|exec|fetch|monitor} <name> <workspace_id>` — deploy + run + monitor + fetch.
|
|
43
|
+
- `fabric-vibe pipeline manage {list|create|run|status|test} ...` — Data Factory pipelines.
|
|
44
|
+
- `fabric-vibe lakehouse list-tables` — inspect lakehouse tables and column schemas before authoring.
|
|
45
|
+
- `fabric-vibe workspace {init|switch|transfer}` — refresh `workspaces.json`, switch active workspace, transfer items across workspaces.
|
|
46
|
+
- `fabric-vibe lint --target .` — run deterministic lints (SEC-01 secrets, DE-09 Faker seed). Pure Python, no fab required.
|
|
47
|
+
- `fabric-vibe precommit` — run all local pre-commit checks (cross-platform).
|
|
48
|
+
|
|
49
|
+
## Rules
|
|
50
|
+
|
|
51
|
+
- Never hardcode secrets; use environment variable names or Key Vault references.
|
|
52
|
+
- Pin all `%pip install` cells with version bounds: `pkg>=x,<y` — never install from git URLs or non-PyPI indexes (SEC-10).
|
|
53
|
+
- After adding or removing a `%pip install`, record the package, version bounds, and notebook name as a `memory` graph node (`graph_create_node` with id `memory/sbom`, or update existing) — see SEC-12.
|
|
54
|
+
- Before adding any new package, verify it has no known CVEs via osv.dev (SEC-12).
|
|
55
|
+
- Keep notebooks under `workspace/<topic>/` — one subfolder per data source or business domain, name chosen by the agent (e.g. `workspace/lux_energy_price/`). Stems must be unique across all subfolders.
|
|
56
|
+
- When a new topic has no source file, use the **mock-data** skill via the `data_mock_generate` MCP tool — always pass `schema` derived from the target table; never hardcode values.
|
|
57
|
+
- Before writing DAX queries or mapping Gold-layer outputs to business metrics, use the **semantic-model** skill via the `semantic_model_show` MCP tool to read the canonical measure definitions and relationships.
|
|
58
|
+
- Keep ingestion and DQ separate: `bronze_<source>.py` ingests; `dq_bronze_<source>.py` validates.
|
|
59
|
+
- After any staging-path constant change, read the affected `workspace/<topic>/*.py` notebooks and call the `pipeline_lineage_check` MCP tool with `notebooks={relative_path: file_content}`. Do not build or deploy if it reports failures — the response includes the full validator output and any Python traceback so the offending file is identifiable.
|
|
60
|
+
- Use Python dataclass contracts in notebook `# %% [contract]` cells.
|
|
61
|
+
- Put thresholds in notebook `# %% [parameters]` cells.
|
|
62
|
+
- Use the **fabric-transform** skill when implementing Silver or Gold Spark transformations, especially Delta MERGE and idempotent upsert logic.
|
|
63
|
+
- Use the **fabric-model** skill when implementing Gold facts, dimensions, KPIs, or semantic-model-aligned outputs.
|
|
64
|
+
- Never commit `.env`, data files, logs, generated notebook bundles, or credentials.
|
|
65
|
+
- Before reporting complete to orchestrator, run `fabric-vibe precommit` — runs deterministic lints locally. Also call the `pipeline_lineage_check` MCP tool with the affected notebook contents to verify staging-path consistency.
|
|
66
|
+
- Persist completed work via `graph_create_node` / `graph_update_node` (kind `memory`). Report status to orchestrator. Never hand off directly to tester or operator.
|
|
67
|
+
- If routed back from orchestrator with a BLOCKED remediation list from operator, address each item in the list, re-run affected notebooks, and report back to orchestrator — do not route to tester or operator directly.
|
|
68
|
+
- When a skill or tool behaves incorrectly and you apply a fix or workaround, persist a `skill-fix` graph node via `graph_create_node` with id `skill-fixes/<skill>-<issue-slug>`, kind `skill-fix`, body sections `## What happened`, `## Root cause`, `## Fix applied`, `## Rule going forward` (with **Why:** and **How to apply:** lines). Future sessions read this automatically via the graph.
|