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.
Files changed (152) hide show
  1. fabric_vibecoding_settings-0.1/.gitignore +59 -0
  2. fabric_vibecoding_settings-0.1/LICENSE +21 -0
  3. fabric_vibecoding_settings-0.1/PKG-INFO +219 -0
  4. fabric_vibecoding_settings-0.1/README.md +199 -0
  5. fabric_vibecoding_settings-0.1/cli/profiles/claude/CLAUDE.md +49 -0
  6. fabric_vibecoding_settings-0.1/cli/profiles/claude/agents/developer.md +68 -0
  7. fabric_vibecoding_settings-0.1/cli/profiles/claude/agents/operator.md +95 -0
  8. fabric_vibecoding_settings-0.1/cli/profiles/claude/agents/orchestrator.md +40 -0
  9. fabric_vibecoding_settings-0.1/cli/profiles/claude/agents/tester.md +46 -0
  10. fabric_vibecoding_settings-0.1/cli/profiles/claude/settings.local.json +67 -0
  11. fabric_vibecoding_settings-0.1/cli/profiles/codex/AGENTS.md +49 -0
  12. fabric_vibecoding_settings-0.1/cli/profiles/codex/agents/developer.toml +18 -0
  13. fabric_vibecoding_settings-0.1/cli/profiles/codex/agents/operator.toml +28 -0
  14. fabric_vibecoding_settings-0.1/cli/profiles/codex/agents/orchestrator.toml +22 -0
  15. fabric_vibecoding_settings-0.1/cli/profiles/codex/agents/tester.toml +6 -0
  16. fabric_vibecoding_settings-0.1/cli/profiles/codex/config.toml +21 -0
  17. fabric_vibecoding_settings-0.1/cli/profiles/shared/.env.example +20 -0
  18. fabric_vibecoding_settings-0.1/cli/profiles/shared/.gitignore.fragment +14 -0
  19. fabric_vibecoding_settings-0.1/cli/profiles/shared/scaffold/data/sandbox/.gitkeep +0 -0
  20. fabric_vibecoding_settings-0.1/cli/profiles/shared/scaffold/workspace/.gitkeep +0 -0
  21. fabric_vibecoding_settings-0.1/cli/setup/setup.ps1 +259 -0
  22. fabric_vibecoding_settings-0.1/cli/setup/setup.sh +282 -0
  23. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/__init__.py +17 -0
  24. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/__main__.py +7 -0
  25. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/cli.py +162 -0
  26. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/commands/__init__.py +1 -0
  27. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/commands/_common.py +113 -0
  28. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/commands/check.py +23 -0
  29. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/commands/install.py +35 -0
  30. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/commands/refresh.py +29 -0
  31. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/core/__init__.py +10 -0
  32. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/core/bootstrap.py +23 -0
  33. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/core/files.py +97 -0
  34. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/core/gitignore.py +57 -0
  35. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/core/markers.py +98 -0
  36. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/core/paths.py +40 -0
  37. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/core/profiles.py +51 -0
  38. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/core/version_check.py +136 -0
  39. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/logging_config.py +43 -0
  40. fabric_vibecoding_settings-0.1/cli/src/fabric_skills_settings/runtime_cli.py +200 -0
  41. fabric_vibecoding_settings-0.1/cli/tools/lakehouse/list-tables.py +298 -0
  42. fabric_vibecoding_settings-0.1/cli/tools/lint/__init__.py +30 -0
  43. fabric_vibecoding_settings-0.1/cli/tools/lint/__main__.py +55 -0
  44. fabric_vibecoding_settings-0.1/cli/tools/lint/core.py +92 -0
  45. fabric_vibecoding_settings-0.1/cli/tools/lint/de_faker_seed.py +87 -0
  46. fabric_vibecoding_settings-0.1/cli/tools/lint/sec_no_hardcoded_secrets.py +99 -0
  47. fabric_vibecoding_settings-0.1/cli/tools/notebook/build.py +318 -0
  48. fabric_vibecoding_settings-0.1/cli/tools/notebook/deploy.py +419 -0
  49. fabric_vibecoding_settings-0.1/cli/tools/notebook/smoke-test.ps1 +61 -0
  50. fabric_vibecoding_settings-0.1/cli/tools/notebook/smoke-test.sh +68 -0
  51. fabric_vibecoding_settings-0.1/cli/tools/pipeline/manage.py +588 -0
  52. fabric_vibecoding_settings-0.1/cli/tools/precommit/__init__.py +1 -0
  53. fabric_vibecoding_settings-0.1/cli/tools/precommit/pre-commit-check.ps1 +25 -0
  54. fabric_vibecoding_settings-0.1/cli/tools/precommit/pre-commit-check.sh +33 -0
  55. fabric_vibecoding_settings-0.1/cli/tools/workspace/init.py +179 -0
  56. fabric_vibecoding_settings-0.1/cli/tools/workspace/pick.py +89 -0
  57. fabric_vibecoding_settings-0.1/cli/tools/workspace/switch.py +147 -0
  58. fabric_vibecoding_settings-0.1/cli/tools/workspace/transfer.py +253 -0
  59. fabric_vibecoding_settings-0.1/pyproject.toml +60 -0
  60. fabric_vibecoding_settings-0.1/server/.dockerignore +23 -0
  61. fabric_vibecoding_settings-0.1/server/Dockerfile +46 -0
  62. fabric_vibecoding_settings-0.1/server/__init__.py +14 -0
  63. fabric_vibecoding_settings-0.1/server/__main__.py +29 -0
  64. fabric_vibecoding_settings-0.1/server/app.py +49 -0
  65. fabric_vibecoding_settings-0.1/server/audit.py +85 -0
  66. fabric_vibecoding_settings-0.1/server/builders/build-agent-capability-graph.py +99 -0
  67. fabric_vibecoding_settings-0.1/server/builders/build-graph.py +133 -0
  68. fabric_vibecoding_settings-0.1/server/builders/graph_build/__init__.py +9 -0
  69. fabric_vibecoding_settings-0.1/server/builders/graph_build/agent_capabilities.py +200 -0
  70. fabric_vibecoding_settings-0.1/server/builders/graph_build/visualize.py +1316 -0
  71. fabric_vibecoding_settings-0.1/server/content/diagnostics/smoke-test-diagnostics.md +26 -0
  72. fabric_vibecoding_settings-0.1/server/content/entry.md +34 -0
  73. fabric_vibecoding_settings-0.1/server/content/indexes/skills-index.md +39 -0
  74. fabric_vibecoding_settings-0.1/server/content/integrations/rtk.md +17 -0
  75. fabric_vibecoding_settings-0.1/server/content/layout/directory-layout.md +27 -0
  76. fabric_vibecoding_settings-0.1/server/content/layout/tool-layout.md +37 -0
  77. fabric_vibecoding_settings-0.1/server/content/rules/data-engineering.md +90 -0
  78. fabric_vibecoding_settings-0.1/server/content/rules/fabric-platform.md +121 -0
  79. fabric_vibecoding_settings-0.1/server/content/rules/notebook-authoring.md +58 -0
  80. fabric_vibecoding_settings-0.1/server/content/rules/security.md +148 -0
  81. fabric_vibecoding_settings-0.1/server/content/semantic/semantic-models.md +29 -0
  82. fabric_vibecoding_settings-0.1/server/content/session/operating-rules.md +26 -0
  83. fabric_vibecoding_settings-0.1/server/content/session/session-start.md +41 -0
  84. fabric_vibecoding_settings-0.1/server/content/workflow/notebook-workflow.md +28 -0
  85. fabric_vibecoding_settings-0.1/server/content/workflow/pipeline-structure.md +42 -0
  86. fabric_vibecoding_settings-0.1/server/content/workflow/workspace-management.md +45 -0
  87. fabric_vibecoding_settings-0.1/server/docker-compose.yml +23 -0
  88. fabric_vibecoding_settings-0.1/server/graph/__init__.py +10 -0
  89. fabric_vibecoding_settings-0.1/server/graph/builder.py +154 -0
  90. fabric_vibecoding_settings-0.1/server/graph/extract.py +37 -0
  91. fabric_vibecoding_settings-0.1/server/graph/lock.py +47 -0
  92. fabric_vibecoding_settings-0.1/server/graph/schema.py +207 -0
  93. fabric_vibecoding_settings-0.1/server/graph/search.py +115 -0
  94. fabric_vibecoding_settings-0.1/server/graph/store.py +109 -0
  95. fabric_vibecoding_settings-0.1/server/graph/writes.py +392 -0
  96. fabric_vibecoding_settings-0.1/server/skills/caveman/SKILL.md +74 -0
  97. fabric_vibecoding_settings-0.1/server/skills/fabric-ingest/SKILL.md +219 -0
  98. fabric_vibecoding_settings-0.1/server/skills/fabric-model/SKILL.md +91 -0
  99. fabric_vibecoding_settings-0.1/server/skills/fabric-notebook-loop/SKILL.md +24 -0
  100. fabric_vibecoding_settings-0.1/server/skills/fabric-notebook-loop/sections/diagnosing-opaque-failures.md +31 -0
  101. fabric_vibecoding_settings-0.1/server/skills/fabric-notebook-loop/sections/full-example.md +59 -0
  102. fabric_vibecoding_settings-0.1/server/skills/fabric-notebook-loop/sections/mlflow-platform-limits.md +63 -0
  103. fabric_vibecoding_settings-0.1/server/skills/fabric-notebook-loop/sections/must.md +26 -0
  104. fabric_vibecoding_settings-0.1/server/skills/fabric-notebook-loop/sections/prefer-avoid.md +28 -0
  105. fabric_vibecoding_settings-0.1/server/skills/fabric-notebook-loop/sections/the-loop.md +111 -0
  106. fabric_vibecoding_settings-0.1/server/skills/fabric-ops/SKILL.md +123 -0
  107. fabric_vibecoding_settings-0.1/server/skills/fabric-pipeline/SKILL.md +85 -0
  108. fabric_vibecoding_settings-0.1/server/skills/fabric-transform/SKILL.md +202 -0
  109. fabric_vibecoding_settings-0.1/server/skills/fabric-validate/SKILL.md +176 -0
  110. fabric_vibecoding_settings-0.1/server/skills/git-commit/SKILL.md +124 -0
  111. fabric_vibecoding_settings-0.1/server/skills/grill-me/SKILL.md +10 -0
  112. fabric_vibecoding_settings-0.1/server/skills/mock-data/SKILL.md +93 -0
  113. fabric_vibecoding_settings-0.1/server/skills/prd/SKILL.md +143 -0
  114. fabric_vibecoding_settings-0.1/server/skills/rtk/SKILL.md +31 -0
  115. fabric_vibecoding_settings-0.1/server/skills/semantic-model/SKILL.md +130 -0
  116. fabric_vibecoding_settings-0.1/server/tools/__init__.py +3 -0
  117. fabric_vibecoding_settings-0.1/server/tools/data/__init__.py +1 -0
  118. fabric_vibecoding_settings-0.1/server/tools/data/mock-data-generator.py +356 -0
  119. fabric_vibecoding_settings-0.1/server/tools/data/tools.py +63 -0
  120. fabric_vibecoding_settings-0.1/server/tools/graph/__init__.py +1 -0
  121. fabric_vibecoding_settings-0.1/server/tools/graph/tools.py +319 -0
  122. fabric_vibecoding_settings-0.1/server/tools/semantic_model/__init__.py +1 -0
  123. fabric_vibecoding_settings-0.1/server/tools/semantic_model/inspect.py +352 -0
  124. fabric_vibecoding_settings-0.1/server/tools/semantic_model/tools.py +53 -0
  125. fabric_vibecoding_settings-0.1/server/tools/utils/script_runner.py +82 -0
  126. fabric_vibecoding_settings-0.1/server/tools/validate/__init__.py +1 -0
  127. fabric_vibecoding_settings-0.1/server/tools/validate/pipeline-lineage.py +134 -0
  128. fabric_vibecoding_settings-0.1/server/tools/validate/tools.py +119 -0
  129. fabric_vibecoding_settings-0.1/tests/_validation/__init__.py +10 -0
  130. fabric_vibecoding_settings-0.1/tests/_validation/agent_guidance.py +268 -0
  131. fabric_vibecoding_settings-0.1/tests/_validation/install_package.py +288 -0
  132. fabric_vibecoding_settings-0.1/tests/conftest.py +20 -0
  133. fabric_vibecoding_settings-0.1/tests/test_agent_capability_graph.py +130 -0
  134. fabric_vibecoding_settings-0.1/tests/test_agent_guidance.py +14 -0
  135. fabric_vibecoding_settings-0.1/tests/test_build.py +426 -0
  136. fabric_vibecoding_settings-0.1/tests/test_extract.py +47 -0
  137. fabric_vibecoding_settings-0.1/tests/test_graph_builder.py +149 -0
  138. fabric_vibecoding_settings-0.1/tests/test_graph_search.py +64 -0
  139. fabric_vibecoding_settings-0.1/tests/test_graph_store.py +93 -0
  140. fabric_vibecoding_settings-0.1/tests/test_graph_visualize.py +302 -0
  141. fabric_vibecoding_settings-0.1/tests/test_install_package.py +23 -0
  142. fabric_vibecoding_settings-0.1/tests/test_layout.py +116 -0
  143. fabric_vibecoding_settings-0.1/tests/test_lint.py +143 -0
  144. fabric_vibecoding_settings-0.1/tests/test_local_helper_wrappers.py +150 -0
  145. fabric_vibecoding_settings-0.1/tests/test_manage.py +388 -0
  146. fabric_vibecoding_settings-0.1/tests/test_mcp_wrappers.py +73 -0
  147. fabric_vibecoding_settings-0.1/tests/test_mock_data_generator.py +158 -0
  148. fabric_vibecoding_settings-0.1/tests/test_profile_entrypoints.py +96 -0
  149. fabric_vibecoding_settings-0.1/tests/test_semantic_model_inspect.py +297 -0
  150. fabric_vibecoding_settings-0.1/tests/test_skill_split_coverage.py +124 -0
  151. fabric_vibecoding_settings-0.1/tests/test_validator_profile_minimal.py +128 -0
  152. 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
+ ![Fabric Agent Pack](img/overview.png)
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
+ ![Claude Code authoring the bronze notebook source file alongside the Fabric Monitor showing download_sources in progress](img/fabric-0.png)
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
+ ![Codex terminal deploying the notebook while the Fabric Monitor shows the job queued](img/fabric-1.png)
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
+ ![Fabric Monitor showing the full activity history with final succeeded runs and earlier failed DQ iterations](img/fabric-2.png)
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
+ ![Fabric Lakehouse table view showing the ingested bronze_electricity_day_ahead_prices Delta table with 1000 rows](img/fabric-3.png)
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
+ ![Fabric Workspace permissions](img/fabric-4.png)
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
+ ![Agent Feature branch](img/fabric-5.png)
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
+ ![Fabric Agent Pack](img/overview.png)
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
+ ![Claude Code authoring the bronze notebook source file alongside the Fabric Monitor showing download_sources in progress](img/fabric-0.png)
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
+ ![Codex terminal deploying the notebook while the Fabric Monitor shows the job queued](img/fabric-1.png)
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
+ ![Fabric Monitor showing the full activity history with final succeeded runs and earlier failed DQ iterations](img/fabric-2.png)
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
+ ![Fabric Lakehouse table view showing the ingested bronze_electricity_day_ahead_prices Delta table with 1000 rows](img/fabric-3.png)
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
+ ![Fabric Workspace permissions](img/fabric-4.png)
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
+ ![Agent Feature branch](img/fabric-5.png)
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.