Maestro compat: support childOf on assertVisible/assertNotVisible (#1294)#1334
Maestro compat: support childOf on assertVisible/assertNotVisible (#1294)#1334devin-ai-integration[bot] wants to merge 2 commits into
Conversation
) - Accept childOf at command level in the Maestro IR and parser. - Thread childOf through the observation condition to the snapshot target resolver, reusing the existing ancestor-scoping path. - Project childOf into the conformance canonical selector so upstream/114_child_of_selector matches. - Remove the stale divergence declaration for 114 and update docs. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
|
Size Report
Startup median (7 runs, lower is better):
Top changed chunks:
|
|
The implementation route looks correct, but the motivating runtime behavior is not regression-covered. The conformance fixture proves parsing/normalization and existing tests prove the generic resolver; reverting either |
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
|
@thymikee Added a production-path/interpreter observation regression test in It runs a Maestro program with both
Validation:
|
|
Re-reviewed |
|
Thanks for the re-review. The PR is green and ready for the next human reviewer. |
Summary
Extends
assertVisible/assertNotVisibleto accept the samechildOfancestor-scoping option already supported ontapOn, so Maestro flows likeupstream/114_child_of_selector.yamlparse and run identically to upstream.What changed
MaestroAssertVisibleCommand/MaestroAssertNotVisibleCommandnow carry an optionalchildOf?: MaestroSelector.parseAssertionaccepts thechildOfkey and parses it the same way astapOn.MaestroObservationConditionincludeschildOf, andassertVisible/assertNotVisiblepass it throughrequireObservation→port.observe→observeTypedMaestroCondition→ the existingresolveTargetFromSnapshotancestor-scoping path (scopeMatchesByAncestor).MaestroObservationEvidencealso carrieschildOf, so observation results retain the selector context.normalize.tsprojects the new command-levelchildOfinto the canonical selector (nested underselector.childOf, matching upstream's shape), and the staleupstream/114_child_of_selectordivergence declaration is removed.Example
Validation
pnpm format:check,pnpm lint,pnpm typecheckpass.pnpm test:unitpasses (480 files / 4254 tests).pnpm maestro:conformancepasses.pnpm check:layeringpasses.Closes #1294.
Link to Devin session: https://app.devin.ai/sessions/8bec5e78313446e180020b22e479c7ac
Requested by: @thymikee