Engineering & roadmap

Implementation review: PB-112, PR 753

Development documentation. This guide follows a reviewed snapshot of main and may describe capabilities not yet in Stable. Check Preview labels and release notes. Some executable names and paths remain unchanged for compatibility. Legacy names explained ↗
Field Value
Backlog item PB-112 Semantic model best-practice checks in governance policies (features FEAT-GOV-09, FEAT-META-13). It is a documented limitation of PB-108 (finding 1 of PB-108-643.md).
Pull request #753, merged as e9f3cadf (head 5c86ed7c; quality PASS 9.1, docs/quality/pr-review.md rows #753). #560 (the Best Practice Analyzer that runs in Fabric) is listed on the item but is still an open draft and was not reviewed here.
Package none
Reviewer Engineering quality review thread. It gave #753 its quality verdict but didn't write it.
Date 2026-10-27
Environment Linux container, main 1b3c37bf, Python 3.13 venv for the engine, Node with Playwright Chromium. No tenant, no Windows.

Outcome#

Recommended: Accepted with Documented Limitations. The product owner decides.

The criterion assumed the semantic model rules would run in Fabric and use capacity. #753 does it differently. It registers SM001 to SM007, the BPA rules that need only a model's definition, as a local model checker. They check the model Update model would write for the project's last layer, worked out on this PC from the metadata project. So nothing is read from Fabric, no job runs and no capacity is used.

A policy can name the rules, and Check now runs them. Check now never says they run in Fabric, because they don't.

What #753 doesn't cover:

  • The rules that need VertiPaq statistics, such as sizes and cardinality. Those need the deployed model in Fabric, and that is #560, still a draft.
  • A model that wasn't built by Update model, or one changed in Fabric after deployment.

The limitations table below lists both.

If the product owner accepts:

  • the criterion should be reworded as "Check now says where each rule runs and whether it uses capacity";
  • the Fabric half needs its own backlog item. PB-112 can't stay open for it once accepted.

Recommended by: Engineering quality review. Decided by (product owner): … on ….

Acceptance criteria#

# Criterion (copied from the backlog item) Result Evidence
1 A policy can name semantic model rules; Check now says they run in Fabric and use capacity before running them Met for naming and running. Not met as worded, because they run on this PC instead. Naming. best_practice_checkers.py:72 registers kind model with model_practices.rules (SM001 to SM007). test_model_practices.py::test_the_rules_are_registered_as_the_model_kind asserts the seven ids, runs_in == "local", and that a checker running in Fabric can't take the model kind over (register raises "model rules already run in local"). Running. central/checks_service.py _gc_model_items builds the model item when a policy names a model rule. test_check_now_runs_model_rules_on_the_last_layer names SM003, SM005 and SM006 in a policy, then checks three things: Check now reports findings SM003 SM_Gold: fact_sales and SM005 SM_Gold: dim_customer; SM006 passes; a description saved in the catalog clears its SM005 finding. Where it runs. model_practices.py docstring: "Nothing is read from Fabric and no Fabric job runs". docs/semantic-model-rules.md:7 says "Nothing is read from Fabric, no Fabric job runs, and it uses no capacity". Rules that need VertiPaq statistics aren't registered (docs/governance.md:185), so a policy can't name a rule that would need Fabric.

Checks#

Check Result Evidence or note
Scope matches the item and package Partly The definition-only rules, policy naming and Check now are present. The Fabric BPA half (#560) is not merged (limitation 1).
New tests fail without the change, pass with it Met test_model_practices.py is new in #753, and its module model_practices.py doesn't exist without the change. It was checked at review time (pr-review.md row #753 6a5b142c).
Full suites pass (pytest, UI, cargo) Met pytest sidecar/tests on main 1b3c37bf: 4847 passed, 76 skipped, 0 failed in 21.5 min. node --test app/tests/ui.test.cjs: 295/0. cargo: not run (PB-071 not landed).
Reachable where docs say; Preview behavior right; packaged into the engine Met Platform > Governance > Best practices (behind preview("bestPractices")) lists templates. A policy's Checked by takes SM003, SM005. Check now shows the findings. A finding's fix opens the data dictionary or the entity (governance-checks.js, open_model → goMeta("model")). Browser best-practice-checks.test.cjs: 8/0. model_practices.py is in the engine package with the other checkers.
OneLake data safety Met It reads the project files and the catalog's descriptions only. Check now writes only governance_checks.json on this PC. Nothing is written to OneLake or Fabric.
Authentication and distribution Met No new scope, no network call.
No unproven local-equals-Fabric claim; Preview tags kept Met, with one point to note The rules check the model the project would write, and the docs say so (semantic-model-rules.md:3-7). They never claim to check the deployed model. The page is marked Preview.
Docs match the code; linked; strict docs build passes Met semantic-model-rules.md matches RULES (ids, severities, categories, fixes). It is linked from README.md, docs/README.md and zensical.toml. governance.md:185, 215, 217 describe the model checker. zensical build --strict on main: clean (docs audit 4, #796).
Accessibility of new controls Met The only new control is the fix link, a standard btn with its label text.
Inventory and backlog updated; product_data.py all consistent Met #797 moves PB-112 to In review with #753 in prs, and FEAT-GOV-09 names it. product_data.py check on #797's head: "Product data is consistent."

Findings#

# Severity Finding Where Status
1 should fix (for Accepted) The criterion's Fabric half is not delivered: BPA rules that need VertiPaq statistics, run on the deployed model in Fabric with a capacity warning. #560 is an open draft. governance_checks.py (no runs_in="fabric" model checker); PR #560 Documented limitation 1; needs a new backlog item if PB-112 is accepted
2 note The rules check the model Update model would write, not what is deployed, so a model built or changed outside KratosForge isn't checked. model_practices.model_item Documented limitation 2
3 note model_practices uses model_dictionary._delta_type, a private helper, across modules (nit from the #753 quality review). model_practices.py Open nit
4 note When #560's Fabric checker lands it needs its own kind: register refuses to replace the local model checker, so the rules can't silently disappear. governance_checks.register; test_the_rules_are_registered_as_the_model_kind Guarded by a test

Documented limitations (only for Accepted with Documented Limitations)#

Limitation Where users are told Backlog item that tracks it
BPA rules that need VertiPaq statistics (Fabric, uses capacity) aren't checked docs/semantic-model-rules.md ("Rules that need the model's VertiPaq statistics ... aren't checked here"); docs/governance.md:185 New item to open (owner: Best Practice Analyzer, #560)
Only the model Update model writes is checked, not the deployed model docs/semantic-model-rules.md:3-7 ("the one Update model writes ... Nothing is read from Fabric") The same new item (#560 reads the deployed model)

Inventory and backlog changes#

  • On acceptance: PB-112 In review → Accepted (with documented limitations); criterion reworded as above; FEAT-GOV-09 verification notes SM001-SM007 with this review; a new backlog item for the Fabric BPA checker (#560) takes limitation 1 and 2.
  • Until the product owner decides: unchanged (PB-112 In review, from #797).

Need a hand?

Find a fix in troubleshooting, or share a reproducible issue with the community.

Get support ↗Improve this guide on GitHub ↗

Search documentation

Start typing to search all 160 guides.

Search runs in your browser esc to close