Skip to content

fix(dr-egeria): split Lineage Linker commands per type, fix ISC membership sync, fix Update-template attribute leakage - #369

Merged
dwolfson merged 3 commits into
odpi:mainfrom
dwolfson:fix/isc-collection-membership
Sep 16, 2026
Merged

dwolfson merged 3 commits into
odpi:mainfrom
dwolfson:fix/isc-collection-membership

Conversation

@dwolfson

Copy link
Copy Markdown
Member

Summary

  • Split the generic Link/Update Lineage Relationship command pair (selector-attribute driven) into a dedicated Link <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 shared Unlink Lineage Relationship.
  • Along the way, 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/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.
  • Fixed SolutionComponentProcessor/SupplyChainProcessor (solution_architect.py) syncing In Information Supply Chain/Implemented By via the ImplementedBy relationship instead of CollectionMembershipInformationSupplyChain is a Collection subtype, so this 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, alongside the 47 correct CollectionMemberships from explicit Add Member blocks.
  • 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.

Test plan

  • validate_compact_specs clean
  • pytest tests/micro-tests passes
  • pytest tests/micro-tests/test_gen_report_specs.py passes
  • refresh_specs --merge-reports regenerated templates/help/report specs; spot-checked Link Data Flow, Update Data Flow, Link Control Flow, Link Process Call, Link Data Mapping, Link Ultimate Source templates for correct per-type attribute sets
  • Confirmed dispatcher registration: all Link/Update/Unlink synonym variants route to the correct processor per command
  • Live-server verification of the ISC/component membership fix and the new Lineage Linker commands (not done in this PR — needs a running Egeria instance)

🤖 Generated with Claude Code

dwolfson and others added 3 commits September 16, 2026 10:14
…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>
@dwolfson
dwolfson merged commit c109ff4 into odpi:main Sep 16, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant