fix(dr-egeria): split Lineage Linker commands per type, fix ISC membership sync, fix Update-template attribute leakage - #369
Merged
Conversation
…fix ISC/component membership sync, fix Update-template attribute leakage Split the generic Link/Update Lineage Relationship command pair into a dedicated command pair per relationship type (Data Flow, Control Flow, Process Call, Lineage Mapping, Data Mapping, Ultimate Source, Ultimate Destination), each exposing only its own type's attributes instead of a selector offering every type's attributes at once. In the process, added the real oneWay/integrationStyle/protocol/frequency/dataExchanged (and Process Call's lineNumber) fields to both the compact spec and the pyegeria SDK's DataFlowProperties/ProcessCallProperties/LineageMapping- Properties/UltimateSourceProperties/UltimateDestinationProperties -- these are real fields on the Egeria DTOs that had no home on the pydantic models, so a caller passing them would validate silently and have them dropped before serialization. Fixed SolutionComponentProcessor/SupplyChainProcessor (solution_ architect.py) syncing In Information Supply Chain/Implemented By via the ImplementedBy relationship instead of CollectionMembership -- InformationSupplyChain is a Collection subtype, so component membership in a supply chain belongs to the same add_to_collection/remove_from_ collection mechanism every other ISC membership sync in this file already uses. Reported live: 71 components each carrying In Information Supply Chain fanned each chain out to 143 ImplementedBy links. Fixed generate_md_cmd_templates.py/generate_dr_help.py injecting generic Referenceable attributes (GUID, Status, Qualified Name, Category, ...) into every "Update" command's template/help entry regardless of whether it targets a Referenceable element at all -- affected 14 commands total (the 7 new Lineage Linker ones plus 7 pre-existing: Update Certification, Update License, Update Next Process Step, Update Data Scope, Update Governance Expectations, Update Governance Measurements, Update Search Keyword). Now consults the registered processor's supports_target_element_lookup() (the same signal the runtime Create<->Update rewrite logic already relies on) instead of a verb-only heuristic. Signed-off-by: Dan Wolfson <dan.wolfson@pdr-associates.com> Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Signed-off-by: Dan Wolfson <dan.wolfson@pdr-associates.com>
PR odpi#365 (just merged into main, "my_profile_app updates 9/14/2026") changed CreateSubscriptionRequestScreen.action_create_subscription to also set a "GUID" key, and changed shop_for_data_handler.py's create_subscription_callback to build a NewElementRequestBody instead of NewAgreementRequestBody (matching create_digital_subscription's own signature in collection_manager.py -- DigitalSubscription is created via CollectionManager's generic create, so NewAgreementRequestBody was never the right class). These two assertions were the only ones in that PR's otherwise-thorough test rewrite that weren't updated to match, so they failed deterministically on main once merged in. Not flaky -- an earlier commit on this branch wrongly diagnosed these as CI-only nondeterminism (13 local/Docker reproduction attempts all passed, because they ran against pre-PR-odpi#365 code) and added a retry mitigation instead of a real fix; that commit has been reverted in favor of this one. Signed-off-by: Dan Wolfson <dan.wolfson@pdr-associates.com> Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Signed-off-by: Dan Wolfson <dan.wolfson@pdr-associates.com>
2 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Link/Update Lineage Relationshipcommand pair (selector-attribute driven) into a dedicatedLink <Type>/Update <Type>pair per relationship type (Data Flow, Control Flow, Process Call, Lineage Mapping, Data Mapping, Ultimate Source, Ultimate Destination), each exposing only its own attributes — plus one sharedUnlink Lineage Relationship.oneWay/integrationStyle/protocol/frequency/dataExchanged(and Process Call'slineNumber) fields to both the compact spec and the pyegeria SDK'sDataFlowProperties/ProcessCallProperties/LineageMappingProperties/UltimateSourceProperties/UltimateDestinationProperties— real fields on the Egeria DTOs that had no home on the pydantic models, so a caller passing them would validate silently and have them dropped before serialization.SolutionComponentProcessor/SupplyChainProcessor(solution_architect.py) syncingIn Information Supply Chain/Implemented Byvia theImplementedByrelationship instead ofCollectionMembership—InformationSupplyChainis a Collection subtype, so this belongs to the sameadd_to_collection/remove_from_collectionmechanism every other ISC membership sync in this file already uses. Reported live: 71 components each carryingIn Information Supply Chainfanned each chain out to 143ImplementedBylinks, alongside the 47 correctCollectionMemberships from explicitAdd Memberblocks.generate_md_cmd_templates.py/generate_dr_help.pyinjecting generic Referenceable attributes (GUID, Status, Qualified Name, Category, ...) into everyUpdatecommand's template/help entry regardless of whether it targets a Referenceable element at all. Affected 14 commands total (the 7 new Lineage Linker ones plus 7 pre-existing:Update Certification,Update License,Update Next Process Step,Update Data Scope,Update Governance Expectations,Update Governance Measurements,Update Search Keyword). Now consults the registered processor'ssupports_target_element_lookup()— the same signal the runtime Create↔Update rewrite logic already relies on — instead of a verb-only heuristic.Test plan
validate_compact_specscleanpytest tests/micro-testspassespytest tests/micro-tests/test_gen_report_specs.pypassesrefresh_specs --merge-reportsregenerated templates/help/report specs; spot-checkedLink Data Flow,Update Data Flow,Link Control Flow,Link Process Call,Link Data Mapping,Link Ultimate Sourcetemplates for correct per-type attribute sets🤖 Generated with Claude Code