Repository navigation
feat(contract-toolkit): express Automation Engine activity nodes in the manifest DAG [FND-4754] - #4793
Conversation
…he manifest DAG [FND-4754] DAGNode always renders activity_name = "execute_workflow", so a contract could not call an AE activity such as fetch_entities or merge directly. Apps that do (csa-uber) had to keep hand-authored manifests. Add AEActivityNode, with typed FetchEntitiesNode and MergeNode plus a generic ActivityNode, accepted in extraNodes alongside DAGNode. They render node_type "activity", the activity's own inputs, and the shared depends_on / error_handling rendering (heartbeat allowed). errorHandling defaults to null so AE's per-activity timeouts apply. Existing DAGNode output is byte-identical. Claude-Session: https://claude.ai/code/session_01AbKqGYd63fn71uWqDDx8yF
|
/lens |
lens summary · updated after round 2 (re-review · only commits since 35506cd)✅ Ready to merge — every finding is resolved Open findings: 🔴 0 critical · 🟠 0 high · 🟡 0 medium · ⚪ 0 low (nit) lens reads this PR as — Approach check — sound. ✔️ Resolved (1)
🕘 Round history (2)
1 file(s) not reviewed
round 2 · $0.030 of $1.00 · 24 model calls · 0 failed requests · 76% prompt cache hits · gpt-6-luna |
…s [FND-4754] The example set every sqlInputFile and sql to "", and nothing in it binds a submission-time value, so a deploy of the example would fail in AE. Use an object-store key per fetch and inline merge SQL instead. The empty-string allowance (for apps that fill the source at submission) is now covered by an inline unit test rather than the example. Addresses lens finding F-a275ad. Claude-Session: https://claude.ai/code/session_01AbKqGYd63fn71uWqDDx8yF
|
/lens |
|
✅ lens · round 2 · re-review · only commits since 35506cd — ready to merge — every finding resolved · $0.03 Open findings: 🔴 0 critical · 🟠 0 high · 🟡 0 medium · ⚪ 0 low (nit) Approach check — ✅ sound
$0.030 of $1.00 · 24 model calls · 0 failed requests |
atlan-ci
left a comment
There was a problem hiding this comment.
lens: ready to merge — every finding at every level is resolved (round 2).
Changelog
AEActivityNodefamily forextraNodes. It calls an Automation Engine activity directly instead of starting a child workflow throughexecute_workflow.FetchEntitiesNode(fetch_entities) andMergeNode(merge) have type-checked inputs that mirror AE'sFetchEntitiesInput/MergeInput. Each must have exactly one SQL source, andextraInput/extraInputscover fields the toolkit does not model.ActivityNodeis the generic form: anyactivityNamewith free-forminputs.node_type: "activity", the activity's owninputs(noworkflow_type/task_queue/argsenvelope, no stampedapp_namearg), and the samedepends_on/error_handlingasDAGNode.heartbeatTimeoutSecondsis allowed.errorHandlingdefaults tonull, so AE's per-activity timeouts apply.extraNodesis now typedMapping<String, DAGNode|AEActivityNode>. ExistingDAGNodeoutput is unchanged: every example regenerates byte-identical.examples/ae-activities/. Docs updated inREADME.md,docs/reference.md,AGENTS.mdandCLAUDE.md.Additional context (e.g. screenshots, logs, links)
App.pkl.fetch_entities/mergenode matched exactly. Theexecute_workflownodes differ only in existing toolkit behavior, which this PR does not change: the toolkit omitsnode_type(AE defaults it toactivity), omitsapp_id/argo_workflow_slug(AE does not read them), and stampsargs.app_name(CNCT-93).atlan-automation-engine-appmain.Checklist
contract-toolkit/tests/ae_activity_nodes_test.pkl)Local runs:
pkl test tests/*.pklpassed (614 tests), as didcheck-invariants.sh,test-sdk-import.py,check-ruff-stable.pyand pre-commit.Copyleft License Compliance
🤖 Generated with Claude Code
https://claude.ai/code/session_01AbKqGYd63fn71uWqDDx8yF