Conversation
Issue #82 — Protocol Interface Evolution: - Add lib/src/holiday_peak_lib/connectors/common/versioning.py - ProtocolVersion with comparison operators and is_compatible_with() - FieldSpec / ProtocolDiff dataclasses with is_breaking() and summary() - BaseConnectorProtocol ABC with _ProtocolMeta metaclass validation - PIMConnectorProtocol_v1 (8 fields) and v2 (+5 fields, 2 new abstract methods) - negotiate_version(), register_protocol(), diff_protocols() - VersionedAdapter with field-mask for older clients + deprecation warnings - Export all 10 symbols from connectors/common/__init__.py - Add 40 tests in lib/tests/test_connectors/test_versioning.py Issue #83 — Data Enrichment Guardrails: - Extend enrichment_guardrail.py with SourceRef, SourceValidator, ContentAttributor, and GuardrailMiddleware async facade - Update guardrails/__init__.py to export 6 symbols (was 2) - Add 39 new tests in lib/tests/test_guardrails.py Documentation staleness fixes: - Test count 508 -> 699 across IMPLEMENTATION_ROADMAP.md, project-status.md, and business-summary.md - Issues #79-#83 marked Closed in project-status.md - Remove stale PR #135 draft row from active PRs table - Update Architecture_Patterns agent row (5 closed, 1 open) - Fix 3 wrong import paths in adr-023 (resilience -> utils.*) - Fix RetailAdapter -> BaseAdapter in adr-003 - Remove duplicate Governance and Compliance section in architecture/README.md; add Reference Architecture Patterns entry Total: 699 tests passing (was 635)
- Remove extra blank line after imports in test_versioning.py (isort) - Black-format all 4 changed files - Rename unused _validate_external sku param to _sku (pylint W0613) - Add pylint: disable=invalid-name for intentional _v1/_v2 class suffixes - Achieves 10.00/10 pylint score on changed lib files
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
Closes #82, closes #83. Resolves all documentation staleness findings from the v1.1.0 audit.
Changes
Issue #82 - Protocol Interface Evolution
lib/src/holiday_peak_lib/connectors/common/versioning.pyProtocolVersionwith comparison operators andis_compatible_with()FieldSpec/ProtocolDiffdataclasses withis_breaking()andsummary()BaseConnectorProtocolABC with_ProtocolMetametaclass (rejects invalid VERSION types at class definition time)PIMConnectorProtocol_v1(8 fields) andPIMConnectorProtocol_v2(+5 fields, 2 new abstract methods)negotiate_version(),register_protocol(),diff_protocols()VersionedAdapter- strips fields unknown to the client version, logs deprecation warningsconnectors/common/__init__.pyto export all 10 versioning symbolslib/tests/test_connectors/test_versioning.pyIssue #83 - Data Enrichment Guardrails
enrichment_guardrail.pywith:SourceRef- typed reference to an internal data source withas_tag()SourceValidator- async; validates PIM/DAM source existence; subclassable via_validate_external()ContentAttributor- injects_sources,_source_system,_source_id,_confidence,_attributed_atinto enriched outputGuardrailMiddleware- async facade combining validation, attribution, and audit loggingguardrails/__init__.pyto export all 6 symbols (was 2)lib/tests/test_guardrails.pyDocumentation Staleness Fixes
docs/IMPLEMENTATION_ROADMAP.md: test count 508 -> 699docs/project-status.md: test count updated; Architecture: Connector Registry Pattern #79-Architecture: Internal Data Enrichment Guardrails #83 marked Closed; stale PR Implement internal data enrichment guardrails for AI agents #135 row removed; agent summary correcteddocs/architecture/business-summary.md: 508 tests / 80%+ -> 699 tests / 85%+docs/architecture/adrs/adr-023: 3 wrong holiday_peak_lib.resilience imports corrected to utils.circuit_breaker / utils.bulkhead / utils.rate_limiterdocs/architecture/adrs/adr-003: RetailAdapter -> BaseAdapter (2 occurrences)docs/architecture/README.md: removed duplicate Governance and Compliance section; added reference/ entry for issue Architecture: Reference Architecture Patterns #84Test Results
699 passed, 28 warnings — no regressions.