Skip to content

fix(datafabric): use UI-compatible column types in the DF Flow fixtures - #2950

Open
phaser wants to merge 1 commit into
mainfrom
fix/datafabric-fixture-ui-compatible-types
Open

fix(datafabric): use UI-compatible column types in the DF Flow fixtures#2950
phaser wants to merge 1 commit into
mainfrom
fix/datafabric-fixture-ui-compatible-types

Conversation

@phaser

@phaser phaser commented Sep 1, 2026

Copy link
Copy Markdown

What

The two Data Fabric Flow connector fixture entities declare column types that
entity-schema.md
lists under "UI-broken types — do NOT use". The CLI now refuses them outright rather than warning:

uip df entities create FlowCodeEvalEntity --file flow_code_eval_entity.entity.json
{ "Result": "Failure",
  "Message": "Field 'viewCount' uses type 'INTEGER' which the Data Fabric UI cannot render",
  "Instructions": "The server accepts 'INTEGER' but the UI cannot render, filter, or edit the column.
                   Use DECIMAL with decimalPrecision: 0 instead.
                   UI-broken types: INTEGER, BIG_INTEGER, FLOAT, DOUBLE, UUID, DATETIME." }

Substitutions are exactly the ones that reference prescribes:

Field Was Now
viewCount INTEGER DECIMAL, decimalPrecision: 0
lastUpdated DATETIME DATETIME_WITH_TZ
externalId UUID STRING, lengthLimit: 36
priority (ContractRegistry) INTEGER DECIMAL, decimalPrecision: 0

Why it was invisible until now

ensure_entity.py is idempotent and only creates when the entity is absent. On a long-lived tenant
the entity predates the CLI validation, so nothing ever breaks. On a fresh tenant creation is
mandatory and fails, taking 8 tasks down as pre-run errors before the agent starts.

Measured on an Automation Suite eval run (skill-flow-datafabric-*): all 8 errored at pre_run,
while the same 8 passed on the cloud nightly with an identical task set.

Three fields were affected, not one — fixing only viewCount would have moved the error to
lastUpdated, then externalId.

The part worth a careful look

check_smoke_create_all_types.py graded the forbidden spellings. Its docstring claimed to cover
"all 8 supported field types" while three of them were types the skill tells agents never to
emit
— so the task was teaching and rewarding the wrong vocabulary. It now grades the sanctioned
set, and its timestamp check requires the offset that is the whole point of DATETIME_WITH_TZ
(a naive 2024-03-10T09:00:00 is now rejected).

This changes what these tasks instruct and grade on cloud as well as on-prem, which is why it
wants your sign-off rather than a rubber stamp. Task prompts and seed records carry matching
literals; the four naive seed timestamps gained a Z.

check_smoke_query_filter.py is deliberately untouched — its EXPECTED keys are internal labels
and it matches on field names and value prefixes, both unchanged.

Verified locally

  • both entity JSONs parse; every *.yaml in the directory parses; every *.py compiles
  • the checker accepts the literals the prompts now instruct, and rejects a naive (offset-free) timestamp
  • no forbidden spelling remains in the fixture directory except the docstring that explains the change

Not yet run against a live tenant — the create path needs a fresh tenant to exercise, which is the
next Automation Suite eval run.

🤖 Generated with Claude Code

The two DF Flow connector fixture entities declare column types that
entity-schema.md lists under "UI-broken types - do NOT use", and the CLI now
refuses them outright rather than warning:

    uip df entities create FlowCodeEvalEntity --file flow_code_eval_entity.entity.json
    "Field 'viewCount' uses type 'INTEGER' which the Data Fabric UI cannot render"
    "Use DECIMAL with decimalPrecision: 0 instead."

ensure_entity.py is idempotent and only creates when the entity is absent, so
on a long-lived tenant the entity predates the validation and nothing breaks.
On a fresh tenant creation is mandatory and fails, taking 8 tasks with it as
pre-run errors. Measured on an Automation Suite eval run: every
skill-flow-datafabric-* task errored before the agent started.

Three fields were affected, not one - fixing only the first would have moved
the error to the next. Substitutions are the ones entity-schema.md prescribes:

  viewCount    INTEGER  -> DECIMAL with decimalPrecision 0
  lastUpdated  DATETIME -> DATETIME_WITH_TZ  (the only UI-compatible timestamp)
  externalId   UUID     -> STRING (opaque id, lengthLimit 36)
  priority     INTEGER  -> DECIMAL with decimalPrecision 0  (ContractRegistry)

check_smoke_create_all_types.py graded the forbidden spellings, so its docstring
claimed to cover "all 8 supported field types" while three of them were types
the skill tells agents never to emit. It now grades the sanctioned vocabulary,
and its timestamp check requires the offset that makes DATETIME_WITH_TZ
different from DATETIME. Task prompts and seed records carry the matching
literals; the four naive seed timestamps gained a Z.

check_smoke_query_filter.py is untouched: its EXPECTED keys are internal labels
and it matches on field names and value prefixes, both unchanged.
@phaser
phaser requested review from a team as code owners September 1, 2026 07:33
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Claude finished @phaser's task in 1m 57s —— View job


PR Review: fix(datafabric): use UI-compatible column types in the DF Flow fixtures

  • Read review criteria and project conventions
  • Read the full diff
  • Read each changed file in full for context
  • Check entity schema reference for UI-broken types
  • Verify internal consistency of changes
  • Post review findings

Summary

Replaces three UI-broken column types (INTEGER, DATETIME, UUID) with their sanctioned substitutes (DECIMAL w/ decimalPrecision: 0, DATETIME_WITH_TZ, STRING w/ lengthLimit: 36) across both entity fixture JSONs, all task prompts, the seed script, and the check_smoke_create_all_types.py grader. The substitutions exactly match what entity-schema.md §UI-broken types prescribes. Without this, fresh-tenant pre_run entity creation fails, blocking all 8 skill-flow-datafabric-* tasks.

Change-by-Change Review

1. flow_code_eval_entity.entity.json

OK
Three fields updated: viewCountDECIMAL + decimalPrecision: 0, lastUpdatedDATETIME_WITH_TZ, externalIdSTRING + lengthLimit: 36. All match entity-schema.md's substitution table exactly. The FILE field is untouched (correctly — it's not a UI-broken type).

2. contract_registry.entity.json

OK
priority changed from INTEGER to DECIMAL + decimalPrecision: 0. Correct substitution.

3. check_smoke_create_all_types.py

Low
The grader changes are correct and well-motivated:

  • _check_int and _check_uuid removed; _check_datetime_check_datetime_tz with a regex that requires a TZ offset (Z or ±HH:MM), rejecting naive timestamps. The regex is sound.
  • EXPECTED dict entries updated to match the new entity types while keeping 8 field entries.
  • Docstring clearly explains why the old types were wrong.

One minor inconsistency: the docstring (line 3) says "all 8 UI-compatible field types" but there are now only 6 distinct types across 8 fields (STRING ×2, DECIMAL ×2). The phrase should be "all 8 fields" (consistent with the success message on line 98 which already says "all 8 fields") or "6 UI-compatible field types across 8 fields". Fix this →

4. smoke_create_all_types.yaml

Low
Same count mismatch in the task description (lines 3-4): "all 8 supported field types (STRING, MULTILINE_TEXT, DECIMAL, BOOLEAN, DATE, DATETIME_WITH_TZ)" — the parenthetical enumerates 6 items, not 8. Either change "8" → "6" in the description, or switch to "8 fields" phrasing. The prompt body (line 27 viewCount: 350 (DECIMAL, decimalPrecision 0), etc.) is correct and consistent with the entity JSON. Fix this →

5. seed_flow_code_eval_records.py

OK
All four lastUpdated timestamps gain Z (UTC offset). Correct — DATETIME_WITH_TZ requires offset-aware values, and the checker now rejects naive timestamps.

6. integration_create_get.yaml

OK
Single timestamp lastUpdated in the prompt gains Z. Consistent with the entity definition change and the grader's new TZ requirement.

7. e2e_contract_intake_pipeline.yaml

OK
priority INTEGERpriority DECIMAL (whole) in the prompt. Matches the updated contract_registry.entity.json.

8. smoke_query.yaml

OK
Description and prompt updated: integerdecimal, whole, datetimedatetime with tz, UUIDstring. Timestamp gains Z. All consistent. check_smoke_query_filter.py is correctly left untouched — its EXPECTED keys are internal labels matching on field names and value prefixes, which are unchanged.

What's Missing

Nothing identified. The PR is tightly scoped to the type substitutions and their downstream effects in prompts, seed data, and graders.

Area Ratings

Area Status Notes
Frontmatter N/A No skill frontmatter changed
E2E Tests OK Existing test tasks updated consistently
Skill Body N/A No SKILL.md changed
References & Assets OK Entity JSONs match the reference schema
Repo Hygiene OK No secrets, no cross-skill deps, changes scoped to one fixture directory

Issues for Manual Review

  • Live tenant validation: As noted in the PR description, the create path only exercises on a fresh tenant. The next Automation Suite eval run will be the first live verification. The static checks (JSON parse, YAML parse, Python compile, regex acceptance/rejection) are sufficient for merge confidence, but monitor the next skill-flow-datafabric-* run.
  • check_smoke_query_filter.py internal labels: The file uses "integer", "datetime", "uuid" as dictionary keys. These are internal labels that don't affect grading (matching is on field names and value prefixes). The PR correctly left them untouched, but they could confuse a future reader who expects them to match entity types. This is cosmetic and not worth blocking on.

Conclusion

Clean, well-motivated fix. The type substitutions exactly match entity-schema.md's sanctioned replacements, and the changes propagate consistently across all 8 files (entity JSONs, task prompts, seed data, grader). The only findings are two Low-severity description count mismatches ("8 field types" → should be "8 fields" or "6 types") that don't affect correctness. Approve.


@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Claude finished @phaser's task in 3m 34s —— View job


Coder-eval task lint (advisory)

4 task YAMLs changed; 0 Critical, 0 High, 0 Medium, 1 Low, 3 OK.

Rubric: .claude/commands/lint-task.md. This check is advisory and never blocks merge.

Evidence of passing run

High — PR body does not claim the changed tasks have been run and passed in a coder-eval run. The "Verified locally" section confirms files parse, compile, and the checker script accepts the new literals — but explicitly notes "Not yet run against a live tenant." Please edit the PR description to add a line like:

Ran `skill-flow-datafabric-smoke-create-all-types` (and siblings) locally and it passed.

or note a run-id / dashboard URL once the next Automation Suite eval run completes.

Per-task lint

tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_create_all_types.yaml — verdict: OK

tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_query.yaml — verdict: OK

tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/integration_create_get.yaml — verdict: OK (theme-captured; see Theme 1)

tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/e2e_contract_intake_pipeline.yaml — verdict: Low (theme-captured; see Theme 1)

Within-PR duplicates

No duplicate clusters detected. All 4 files are modifications of existing tasks, not new additions.

Themes

Theme 1 — Validate-only flow tests [Medium]: Both integration_create_get.yaml (integration tier, line 1-8) and e2e_contract_intake_pipeline.yaml (e2e tier, line 1-10) skip flow debug, relying on uip maestro flow validate + structural checker scripts only. Both document the rationale in their description field ("Static-validate only; runtime flow debug skipped to avoid live tenant side effects"), earning the description-rationale carve-out (High→Medium for e2e, Medium→Low for integration). This is a pre-existing pattern across the entire datafabric_connector/ folder and is not introduced by this PR — all 12 sibling tasks share it.

Conclusion

⚠ 1 task has issues, max severity Low (theme-captured). The substantive changes — replacing UI-broken types (INTEGERDECIMAL with decimalPrecision: 0, DATETIMEDATETIME_WITH_TZ, UUIDSTRING) across entity fixtures, prompts, seed data, and the checker script — are internally consistent and align with the entity-schema.md reference. The checker's new DATETIME_TZ_RE correctly requires an offset suffix, rejecting naive timestamps.

Please add a passing-run claim to the PR description once the tasks have been exercised on a tenant.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant