fix(datafabric): use UI-compatible column types in the DF Flow fixtures - #2950
fix(datafabric): use UI-compatible column types in the DF Flow fixtures#2950phaser wants to merge 1 commit into
Conversation
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.
|
Claude finished @phaser's task in 1m 57s —— View job PR Review: fix(datafabric): use UI-compatible column types in the DF Flow fixtures
SummaryReplaces three UI-broken column types ( Change-by-Change Review1.
|
| 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.pyinternal 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.
|
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: or note a run-id / dashboard URL once the next Automation Suite eval run completes. Per-task lint
|
What
The two Data Fabric Flow connector fixture entities declare column types that
entity-schema.mdlists under "UI-broken types — do NOT use". The CLI now refuses them outright rather than warning:
Substitutions are exactly the ones that reference prescribes:
viewCountINTEGERDECIMAL,decimalPrecision: 0lastUpdatedDATETIMEDATETIME_WITH_TZexternalIdUUIDSTRING,lengthLimit: 36priority(ContractRegistry)INTEGERDECIMAL,decimalPrecision: 0Why it was invisible until now
ensure_entity.pyis idempotent and only creates when the entity is absent. On a long-lived tenantthe 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 atpre_run,while the same 8 passed on the cloud nightly with an identical task set.
Three fields were affected, not one — fixing only
viewCountwould have moved the error tolastUpdated, thenexternalId.The part worth a careful look
check_smoke_create_all_types.pygraded 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:00is 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.pyis deliberately untouched — itsEXPECTEDkeys are internal labelsand it matches on field names and value prefixes, both unchanged.
Verified locally
*.yamlin the directory parses; every*.pycompilesNot 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