Repository navigation
feat(product-manager): subscription types and ODCS/ODPS documents, with Dr.Egeria commands - #427
Merged
dwolfson merged 4 commits intoOct 5, 2026
Conversation
…/product documents Adds the eleven product-manager calls the refreshed .http documents: create_one_time/periodic/ongoing_update_subscription (a subscription type on a digital product, returning the GUID of the governance action process that creates subscriptions of it), publish_data_contract_string / publish_data_product_string (to an integration daemon's Bitol listeners), import_data_contract[_string] / import_data_product[_string] (catalog an ODCS agreement / ODPS digital product) and generate_data_contract / generate_data_product. The audit's product-manager section now reports 0 missing. The string endpoints take text/plain, so _async_make_request gains a keyword-only as_text flag (uses the existing, previously unused, text_headers; default unchanged, and preserved across the 401 retry). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: Dan Wolfson <dan.wolfson@pdr-associates.com>
…ct and Data Product New Digital Product Manager commands wrapping the product_manager methods: Create Subscription Type (one-time / periodic / ongoing-update; the governance action process it yields is what Initiate Subscription runs), Import Data Contract / Import Data Product (catalog an ODCS / ODPS document) and Publish Data Contract / Publish Data Product (send one to an integration daemon). Egeria reconciles an existing subscription type and updates a re-imported document version, so all five are safe to re-run (no Update form). Documents are read from a Document File path (resolved against the markdown file via a new input_path in the processing context) rather than inline: YAML's --- and # lines are horizontal rules and headings to the extractor. Import and Publish are added to STANDARD_VERBS; without that the headings fall through as prose. The notification interval gets its own attribute (Subscription Notification Interval, minutes) because the Governance Officer family's Notification Interval is milliseconds and attribute names are global. Authoring errors raise ValueError, not PyegeriaException, whose boilerplate says the client cannot connect to the platform. Specs were edited through the Spec Editor API; validate_compact_specs, refresh_specs --merge-reports and the attribute-consumption audit are clean. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: Dan Wolfson <dan.wolfson@pdr-associates.com>
The Product Catalog view service's governance-definitions/by-name lookup. A digital product's subscription types are governance action processes, so this finds the one Initiate Subscription runs. No separate Product Catalog client exists (it is the read-only side of the product manager's), so the method lives on ProductManager with its own URL. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: Dan Wolfson <dan.wolfson@pdr-associates.com>
…e check ISSUE-126: ProductManager and DigitalBusiness never set collection_command_root, so 27 inherited CollectionManager methods raise AttributeError. ISSUE-127: delete_collection(cascade=True) silently never sends cascadeDelete (same shape as ISSUE-62). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: Dan Wolfson <dan.wolfson@pdr-associates.com>
dwolfson
marked this pull request as ready for review
October 5, 2026 14:14
2 tasks done
dwolfson
deleted the
feat/product-manager-subscriptions-and-data-documents
branch
October 5, 2026 14:17
This was referenced Oct 5, 2026
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
Three commits (plus an issues-log commit), reviewable one at a time.
1. SDK (
ProductManager): the eleven product-manager calls the refreshed.httpdocuments that the SDK lacked (the audit'sproduct-managersection went from 11 missing to 0):create_one_time_subscription/create_periodic_subscription/create_ongoing_update_subscriptionadd a subscription type to a digital product and return the GUID of the governance action process that creates subscriptions of that type.publish_data_contract_string/publish_data_product_stringsend an ODCS / ODPS document to an integration daemon's Bitol listeners.import_data_contract[_string]/import_data_product[_string]catalog an ODCS agreement / ODPS digital product.generate_data_contract/generate_data_product.text/plain, so_async_make_requestgains a keyword-onlyas_textflag. It uses the existing, previously unusedtext_headers, the default is unchanged, and it survives the 401 retry.2. Dr.Egeria commands (Digital Product Manager family):
Create Subscription Type,Import Data Contract,Import Data Product,Publish Data Contract,Publish Data Product.Updateform.Create Subscription Typeproduces the governance action process that the Automation family'sInitiate Subscriptionruns.Document Filepath, resolved against the markdown file (newinput_pathin the processing context), not inline, because YAML's---and#lines are horizontal rules and headings to the extractor.ImportandPublishare added toSTANDARD_VERBS; without that the headings silently fall through as prose.Subscription Notification Interval(minutes). The Governance Officer family'sNotification Intervalis milliseconds and attribute names are global, so reusing it would have sent values off by 60,000x.validate_compact_specs,refresh_specs --merge-reportsand the attribute-consumption audit are clean.docs/dr_egeria_manual.mdupdated.3.
get_governance_action_processes_by_name(Product Catalog view service'sgovernance-definitions/by-name), which finds the processInitiate Subscriptionruns. There is no Product Catalog client, so it lives onProductManagerwith its own URL.Live verification (2026-10-05, dev quickstart platform, through the real
dr_egeria --processCLI)Create Subscription Type, all three kinds (ONE_TIME, PERIODIC, ONGOING_UPDATE with a monitored resource)Import Data Contract/Import Data Productgenerate_data_contractget_governance_action_processes_by_namePublish Data Contract/Publish Data Product,generate_data_product, theimport_*bean (dict) formsEverything the check created was removed and verified gone by GUID.
A first live attempt exercised nothing: the shared checkout was on the wrong branch, so the CLI answered "No processor registered" (a warning, exit code 0). It was caught, the scripts now preflight the branch, and the run above is the real one.
Found along the way (logged, not fixed here)
ProductManagerandDigitalBusinessnever callCollectionManager.__init__, so 27 inherited collection methods raiseAttributeErroron them.CollectionManager.delete_collection(cascade=True)silently never sendscascadeDelete(same shape as ISSUE-62). Egeria also refuses to delete aDataStructurethat has a memberDataFieldeven with cascade, so an imported contract must be removed child-first.Test plan
as_textverified through the real_async_make_requestwith only httpx stubbed)tests/micro-testspasses locally (906 collected)scripts/omvs_audit.py --service product-manager: 0 missing, 0 mismatched🤖 Generated with Claude Code