Parity Gap — Fabric IQ editors (v2 validator, 2026-05-26)¶
Editors:
variable-library/plan/ontology/graph-modelSource:apps/fiab-console/lib/editors/phase4-editors.tsx(lines 540-877) Validator state: source-grade audit. Phase 4 live click blocked by MFA expiration.
Critical request checks¶
- "Variable Library: 9 type options visible in dropdown" — Confirmed.
VarTypeunion (lines 550-559) has 9 types:string | integer | number | bool | datetime | guid | item-ref | connection-ref | secret-ref.VAR_TYPE_LABELS(564-574) maps each to a Fabric-aligned display name (String, Integer, Number, Boolean, DateTime, Guid, ItemReference, ConnectionReference, SecretReference). All 9 render as<option>rows in the native<select>(line 651) per row. - "Plan: progress badges visible" — Confirmed. Lines 919-928 render
total / to-do / doing / done / overduebadges +pct% complete+ a percent-bar<div>. Real counts computed fromstate.tasks. - "Ontology: Materialize-as-graph-model button works" — Confirmed in source. Lines 704-743 implement
materializeToGraphModel: parses classes, builds nodes (one per class) + IS_A edge type (if any parent), POSTs to/api/items/graph-model. Button is wired (line 772onClick={materializeToGraphModel}). Returns success/failure MessageBar with the new graph-model id.
1. variable-library¶
| Element | Fabric Variable Library | Loom | Severity |
|---|---|---|---|
| 9 variable types | String, Integer, Number, Boolean, DateTime, Guid, ItemReference, ConnectionReference + Loom's secret-ref | ✓ 9 types in <select> | A-present ✓ |
| Value sets (default / dev / test / prod) | Tabs | TabList with 4 tabs (line 622-625) | A-present ✓ |
| Per-type validation | Inline | validateVarValue regex per type (lines 587-597) — integer, number, bool, datetime, guid | B-present ✓ |
| Type icons in dropdown | Yes (Fluent icons per type) | Plain text labels only | MINOR |
| New variable / Delete row | Yes | + New variable button + per-row Delete | present |
| Save | Toolbar | SaveBar | present |
| Git serialization preview | Side panel showing JSON shape | absent | MAJOR — per csa-loom-parity-reality this is a core Fabric feature |
Dynamic resolution downstream (@{variables.NAME}) | Pipelines / Notebooks resolve | MessageBar says "resolved at runtime by executor" — no implementation in this Loom build | MAJOR — advertised, not wired |
Reference editor for item-ref / connection-ref | Picker dialog | plain text input with placeholder | MAJOR (advertised in placeholder, no UI) |
| Bulk import / export | Toolbar | absent | MINOR |
Grade: B — Best Fabric IQ editor. 9 types ✓, value sets ✓, per-type validation ✓, save ✓. Drops from A because of no Git serialization preview and no real downstream resolution (the variable library has no consumer in this Loom).
2. plan¶
| Element | Microsoft Planner / Fabric Plan | Loom | Severity |
|---|---|---|---|
| Progress badges (total, todo, doing, done, overdue, %) | Yes | ✓ All 6 badges + % bar | A-present ✓ |
| Task list with title / owner / due / status / depends-on | Grid | 5-col + delete | present |
| Inline edit per cell | Yes | Fluent Input / native select / date input | present |
| Save | Save button | SaveBar | present |
| Kanban / Board view | Yes | absent | MAJOR |
| Gantt / timeline | Pro | absent | MINOR (Pro tier) |
| Approvals workflow | Power Automate integration | MessageBar "approval-workflow handoff to power-automate-flow … deferred" | MAJOR — advertised, not wired |
| Notifications | Yes | absent | MINOR |
| Bulk import / .mpp / Project | Yes | absent | MINOR |
| Semantic model writeback (push status into semantic-model measures) | per-Plan custom | MessageBar "deferred" | MINOR (Pro feature) |
Grade: C — progress badges ✓ is a real D→C upgrade since the parity-reality memo. Inline edit works. Cosmos save works. But no board view, no approval workflow handoff, no semantic-model writeback — so still well below B.
3. ontology¶
| Element | OWL / Turtle editor | Loom | Severity |
|---|---|---|---|
| Source editor | Monaco with Turtle/OWL syntax + ontology validation | <textarea> | BLOCKER ❌ |
| Parsed class hierarchy preview | Tree view with parent/child | Tree rendering flat list (no actual hierarchy nesting) | MAJOR — parser ignores nesting, just shows "Class : Parent" |
| Materialize as graph-model | n/a (custom) | ✓ Button wired (lines 704-743, 772) — calls /api/items/graph-model POST | B-present ✓ |
| Lakehouse / Warehouse entity binding | Side panel | MessageBar "still deferred" | MAJOR |
| Activator trigger hooks | Side panel | MessageBar "still deferred" | MINOR |
| Class property editor | Form | absent (regex parser only) | BLOCKER for real OWL |
| Reasoner / Inference | Compute button | absent | BLOCKER (Pro feature) |
| Save | Yes | SaveBar | present |
Grade: C — Materialize-as-graph-model fix is real and adds end-to-end flow (ontology → graph-model → ADX). <textarea> blocks A. Parser is a regex shim not real OWL. The Cosmos save + graph-model handoff is what saves it from D.
4. graph-model¶
| Element | n/a (Loom-native) | Loom | Severity |
|---|---|---|---|
| Target ADX database | Input | <Input> | present |
| Node types editor | Schema designer / form | <textarea> (JSON) | BLOCKER for parity with a real schema designer |
| Edge types editor | Schema designer / form | <textarea> (JSON) | BLOCKER |
| Materialize to ADX | n/a | Button → POST /api/items/graph-model/[id]/materialize | B-present ✓ |
| Materialize result list (per-node/edge with [ok]/[err]) | n/a | MessageBar with success/error list | present |
| lastMaterializedAt timestamp | n/a | shown in Caption1 | present |
| Save | Yes | SaveBar | present |
| Visual diagram of node/edge graph | n/a | absent | MAJOR |
| Schema validation (ADX-table-name uniqueness, type compatibility) | n/a | absent | MAJOR |
Grade: C — Materialize ✓ is real end-to-end (creates KQL tables). Save ✓. Two <textarea> for JSON editing block higher. The author "Add entity"/"Add relationship" ribbon buttons are labels only — they don't open a form.
Phase 4 (click-every-button)¶
| Button | Status |
|---|---|
| variable-library Save / + New variable / per-row Delete | ✓ all wired |
| variable-library TabList default/dev/test/prod | ✓ wired |
| variable-library ribbon "New variable" / "Save" / value-set tabs | dead labels |
| plan Save / + New task / per-row Delete | ✓ all wired |
| plan ribbon "New task" / "Save" | dead labels |
| ontology Save / Materialize button | ✓ wired |
| ontology ribbon "Author" / "Add entity" / "Add relationship" / "Save" / "Materialize" | dead labels |
| graph-model Save / Materialize / per-textarea blur=parse | ✓ wired |
| graph-model ribbon "Author" / "Add entity" / "Add relationship" / "Save" / "Materialize" | dead labels |
The "Add entity / Add relationship" ribbon labels in graph-model + ontology are particularly misleading — they imply form-based authoring that doesn't exist.
Summary¶
| Editor | Grade | Reason |
|---|---|---|
| variable-library | B | 9 types ✓ + 4 value sets ✓ + per-type validation ✓ + save ✓; no Git preview, no consumer wiring |
| plan | C | Progress badges ✓ + inline edit ✓; no board view, no approval workflow |
| ontology | C | Materialize fix ✓ end-to-end; <textarea> + regex parser (not real OWL) + dead ribbon labels |
| graph-model | C | Materialize ✓; two <textarea> for schema, no visual diagram, no validation |