docs(maestro-flow): retire the dynamic-entity FilterBuilder workaround, document the silent-drop hazard - #2591
docs(maestro-flow): retire the dynamic-entity FilterBuilder workaround, document the silent-drop hazard#2591jiyangzh wants to merge 1 commit into
Conversation
…d, document the silent-drop hazard
cli#2924 (0273928c8, 2026-07-29) removed the --detail.filter rejection
for dynamic entities; the skill still routed agents onto the hand-Edit
workaround, which cost the 2026-08-11/12 CEQL nightlies. Live-proven
end to end 2026-08-12: tree with a dynamic operand on BillingDisputeERP
compiles ({var_} + filterVariables + real savedFilterTrees) and debug
completes with the 8 known rows. New hazard documented: an unmatched
field id (case-sensitive) is dropped silently — empty filter returns
every record; no CLI guard yet.
|
Claude finished @jiyangzh's task in 2m 21s —— View job PR Review: docs(maestro-flow) — retire FilterBuilder workaround
SummaryRetires a now-unnecessary (and dangerous) hand- Change-by-Change Review1.
|
| Area | Status | Notes |
|---|---|---|
| Frontmatter | OK | Unchanged |
| E2E Tests | OK | Existing filter tests (ceql_where.yaml, trigger_with_filter.yaml) still cover the behavior |
| Skill Body | OK | SKILL.md unchanged |
| References & Assets | OK | Both changed files are internally consistent; all links resolve |
| Repo Hygiene | OK | No secrets, no cross-skill deps, changes scoped to the affected skill |
Issues for Manual Review
- Silent-drop hazard accuracy: The PR documents that the CLI silently drops unmatched filter-tree leaves (producing
queryExpression: ""or a danglingAND). This behavior was live-verified onuip 1.201.0per the PR description. A reviewer familiar with the CLI internals should confirm this matches the currentnode configuresemantics and that the documented diagnostic path (uip df entities list→uip df entities get) is the right way to surface the field mismatch.
Conclusion
Clean, well-scoped documentation correction that removes a dangerous workaround and replaces it with accurate guidance for the current CLI behavior. The silent-drop hazard is documented consistently across both connector and connector-trigger references (error tables and debug tips). No issues found — recommend approve.
Why
The dynamic-entity FilterBuilder limitation this skill documented no longer exists. cli#2924 (commit
0273928c8, merged 2026-07-29, DAP integration ENGCE-59465) removed the--detail.filterrejection. The skill still routed agents onto the retired workaround — hand-Editinputs.detailon a CLI-owned node, injecting both filter halves by hand. That path is now unnecessary and dangerous: it is a re-configure hazard and it bypasses the compiler. It cost two nightly failures (2026-08-11 and 2026-08-12 — hand-written CEQL grammar defects on a path the compiler should own).Live-proven end to end (2026-08-12, uip 1.201.0): a filter tree with a dynamic operand (
{"value": "=js:$vars.start.output.invoiceNumber", "isLiteral": false}) on Data Service entityBillingDisputeERPcompiles all three halves —— validates clean, and
flow debugcompletes with the entity's 8 known rows for the test invoice. Requirement:pathParameters.entityNameset in the samenode configurecall (it drives the automatic schema fetch).The successor hazard, now documented
A tree leaf whose field id does not match the entity schema is dropped silently — matching is case-sensitive (
InvoiceNumbervsinvoiceNumber).node configurereports Success and writesqueryExpression: ""(single bad leaf → filter gone → the query returns all records) or a dangling… AND(mixed leaves → runtime fault). No CLI guard exists yet; a fix is planned (guard on the compiled output).Changes
connector/impl.mdStep 6a: deleted the CLI-limitation paragraph, the "only sanctionedEdit" blockquote, and the 4-step workaround. Replaced with the current contract — pass--detail.filter, always set the entity name, match field ids exactly (schema viauip df entities list→uip df entities get).connector/impl.mdCommon Errors: new row for the silent-drop hazard.connector-trigger/impl.md: the error row citing the removed message and Debug Tip 8 claimed a configure-time guard that no longer runs — rewritten for the trigger case (unmatched leaf drops from the compiledfilterExpression; the trigger fires on events the filter should exclude)."Hand-authored CEQL strings" section and anchor unchanged — the whole-value
=js:path remains sanctioned (MST-13005). NoSKILL.mdfrontmatter change.