refactor(acms): unify ContextFragment model hierarchies by extending CRP base types #598

Merged
freemo merged 1 commit from refactor/unify-context-fragment-models into master 2026-03-05 21:43:55 +00:00
Owner

Summary

Core domain types (FragmentProvenance, ContextFragment, ContextBudget, ContextPayload) now extend their CRP counterparts via Pydantic v2 inheritance, ensuring isinstance compatibility across the model hierarchy. This eliminates the duplicate model hierarchies that existed between the CRP layer and the core domain layer.

Changes

  • CRP base types made frozen=True: FragmentProvenance, ContextFragment, ContextBudget, AssembledContext — validated that no CRP consumer mutates these instances
  • CRP AssembledContext fields: fragments and strategies_used changed from list to tuple for frozen-model consistency
  • Core types extend CRP bases: FragmentProvenance(CRPFragmentProvenance), ContextFragment(CRPContextFragment), ContextBudget(CRPContextBudget), ContextPayload(CRPAssembledContext)
  • Removed duplicate ContextFragment dataclass from skeleton_compressor.py; service now uses core.context_fragment.ContextFragment
  • Updated project_context.py to pass tuples to frozen AssembledContext
  • Updated skeleton_compressor tests to handle model-level validation (Pydantic now rejects invalid fragments at construction time)
  • Added Behave tests (10 scenarios in unified_context_models.feature)
  • Added Robot integration tests (3 test cases in unified_context_models.robot)
  • Added ASV benchmarks for unified model construction and isinstance-check throughput
  • Updated Known Limitations table in docs/reference/acms.md

Verification

  • nox -s lint — passed
  • nox -s typecheck — 0 errors, 0 warnings (Pyright standard mode)
  • nox -s unit_tests — 266 features, 8510 scenarios, 32865 steps — all passed
  • nox -s integration_tests — 1197 tests — all passed
  • nox -s coverage_report — 97% coverage (meets threshold)

ISSUES CLOSED: #569

## Summary Core domain types (`FragmentProvenance`, `ContextFragment`, `ContextBudget`, `ContextPayload`) now extend their CRP counterparts via Pydantic v2 inheritance, ensuring `isinstance` compatibility across the model hierarchy. This eliminates the duplicate model hierarchies that existed between the CRP layer and the core domain layer. ## Changes - **CRP base types made `frozen=True`**: `FragmentProvenance`, `ContextFragment`, `ContextBudget`, `AssembledContext` — validated that no CRP consumer mutates these instances - **CRP `AssembledContext` fields**: `fragments` and `strategies_used` changed from `list` to `tuple` for frozen-model consistency - **Core types extend CRP bases**: `FragmentProvenance(CRPFragmentProvenance)`, `ContextFragment(CRPContextFragment)`, `ContextBudget(CRPContextBudget)`, `ContextPayload(CRPAssembledContext)` - **Removed duplicate `ContextFragment` dataclass** from `skeleton_compressor.py`; service now uses `core.context_fragment.ContextFragment` - **Updated `project_context.py`** to pass tuples to frozen `AssembledContext` - **Updated skeleton_compressor tests** to handle model-level validation (Pydantic now rejects invalid fragments at construction time) - **Added Behave tests** (10 scenarios in `unified_context_models.feature`) - **Added Robot integration tests** (3 test cases in `unified_context_models.robot`) - **Added ASV benchmarks** for unified model construction and isinstance-check throughput - **Updated Known Limitations table** in `docs/reference/acms.md` ## Verification - `nox -s lint` — passed - `nox -s typecheck` — 0 errors, 0 warnings (Pyright standard mode) - `nox -s unit_tests` — 266 features, 8510 scenarios, 32865 steps — all passed - `nox -s integration_tests` — 1197 tests — all passed - `nox -s coverage_report` — 97% coverage (meets threshold) ISSUES CLOSED: #569
freemo force-pushed refactor/unify-context-fragment-models from 56e8d2194f
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / quality (pull_request) Successful in 18s
CI / build (pull_request) Successful in 18s
CI / typecheck (pull_request) Successful in 35s
CI / security (pull_request) Successful in 1m0s
CI / unit_tests (pull_request) Successful in 2m4s
CI / docker (pull_request) Successful in 50s
CI / integration_tests (pull_request) Successful in 2m55s
CI / coverage (pull_request) Failing after 4m30s
CI / benchmark-regression (pull_request) Successful in 28m35s
to f6045c9027
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / quality (pull_request) Successful in 17s
CI / build (pull_request) Successful in 17s
CI / typecheck (pull_request) Successful in 34s
CI / security (pull_request) Successful in 37s
CI / unit_tests (pull_request) Successful in 2m4s
CI / docker (pull_request) Successful in 38s
CI / integration_tests (pull_request) Successful in 3m13s
CI / coverage (pull_request) Failing after 4m19s
CI / benchmark-regression (pull_request) Has been cancelled
2026-03-05 16:31:26 +00:00
Compare
freemo force-pushed refactor/unify-context-fragment-models from f6045c9027
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / quality (pull_request) Successful in 17s
CI / build (pull_request) Successful in 17s
CI / typecheck (pull_request) Successful in 34s
CI / security (pull_request) Successful in 37s
CI / unit_tests (pull_request) Successful in 2m4s
CI / docker (pull_request) Successful in 38s
CI / integration_tests (pull_request) Successful in 3m13s
CI / coverage (pull_request) Failing after 4m19s
CI / benchmark-regression (pull_request) Has been cancelled
to b7771d56b0
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / quality (pull_request) Successful in 18s
CI / build (pull_request) Successful in 19s
CI / security (pull_request) Successful in 33s
CI / typecheck (pull_request) Successful in 52s
CI / unit_tests (pull_request) Successful in 2m7s
CI / docker (pull_request) Successful in 9s
CI / integration_tests (pull_request) Successful in 3m0s
CI / coverage (pull_request) Failing after 4m15s
CI / benchmark-regression (pull_request) Has been cancelled
2026-03-05 16:41:22 +00:00
Compare
freemo force-pushed refactor/unify-context-fragment-models from b7771d56b0
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / quality (pull_request) Successful in 18s
CI / build (pull_request) Successful in 19s
CI / security (pull_request) Successful in 33s
CI / typecheck (pull_request) Successful in 52s
CI / unit_tests (pull_request) Successful in 2m7s
CI / docker (pull_request) Successful in 9s
CI / integration_tests (pull_request) Successful in 3m0s
CI / coverage (pull_request) Failing after 4m15s
CI / benchmark-regression (pull_request) Has been cancelled
to 2b23f5496a
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 14s
CI / build (pull_request) Successful in 16s
CI / quality (pull_request) Successful in 18s
CI / security (pull_request) Successful in 32s
CI / typecheck (pull_request) Successful in 34s
CI / unit_tests (pull_request) Successful in 2m3s
CI / docker (pull_request) Successful in 38s
CI / integration_tests (pull_request) Successful in 3m5s
CI / coverage (pull_request) Failing after 4m19s
CI / benchmark-regression (pull_request) Successful in 27m35s
2026-03-05 16:47:57 +00:00
Compare
freemo force-pushed refactor/unify-context-fragment-models from 2b23f5496a
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 14s
CI / build (pull_request) Successful in 16s
CI / quality (pull_request) Successful in 18s
CI / security (pull_request) Successful in 32s
CI / typecheck (pull_request) Successful in 34s
CI / unit_tests (pull_request) Successful in 2m3s
CI / docker (pull_request) Successful in 38s
CI / integration_tests (pull_request) Successful in 3m5s
CI / coverage (pull_request) Failing after 4m19s
CI / benchmark-regression (pull_request) Successful in 27m35s
to c6e7b56052
All checks were successful
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / build (pull_request) Successful in 16s
CI / quality (pull_request) Successful in 17s
CI / security (pull_request) Successful in 32s
CI / typecheck (pull_request) Successful in 35s
CI / unit_tests (pull_request) Successful in 1m57s
CI / docker (pull_request) Successful in 38s
CI / integration_tests (pull_request) Successful in 2m56s
CI / coverage (pull_request) Successful in 4m26s
CI / benchmark-regression (pull_request) Successful in 27m59s
2026-03-05 18:40:49 +00:00
Compare
freemo force-pushed refactor/unify-context-fragment-models from c6e7b56052
All checks were successful
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / build (pull_request) Successful in 16s
CI / quality (pull_request) Successful in 17s
CI / security (pull_request) Successful in 32s
CI / typecheck (pull_request) Successful in 35s
CI / unit_tests (pull_request) Successful in 1m57s
CI / docker (pull_request) Successful in 38s
CI / integration_tests (pull_request) Successful in 2m56s
CI / coverage (pull_request) Successful in 4m26s
CI / benchmark-regression (pull_request) Successful in 27m59s
to 5761902aff
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Failing after 14s
CI / quality (pull_request) Successful in 17s
CI / build (pull_request) Successful in 16s
CI / unit_tests (pull_request) Failing after 25s
CI / security (pull_request) Successful in 34s
CI / typecheck (pull_request) Failing after 37s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / benchmark-regression (pull_request) Has been skipped
CI / integration_tests (pull_request) Failing after 1m23s
2026-03-05 20:11:05 +00:00
Compare
freemo scheduled this pull request to auto merge when all checks succeed 2026-03-05 20:11:17 +00:00
freemo force-pushed refactor/unify-context-fragment-models from 5761902aff
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Failing after 14s
CI / quality (pull_request) Successful in 17s
CI / build (pull_request) Successful in 16s
CI / unit_tests (pull_request) Failing after 25s
CI / security (pull_request) Successful in 34s
CI / typecheck (pull_request) Failing after 37s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / benchmark-regression (pull_request) Has been skipped
CI / integration_tests (pull_request) Failing after 1m23s
to fae438a7a7
All checks were successful
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / build (pull_request) Successful in 15s
CI / quality (pull_request) Successful in 17s
CI / security (pull_request) Successful in 33s
CI / typecheck (pull_request) Successful in 35s
CI / unit_tests (pull_request) Successful in 2m22s
CI / integration_tests (pull_request) Successful in 3m0s
CI / docker (pull_request) Successful in 39s
CI / coverage (pull_request) Successful in 4m21s
CI / lint (push) Successful in 14s
CI / quality (push) Successful in 16s
CI / build (push) Successful in 16s
CI / security (push) Successful in 30s
CI / typecheck (push) Successful in 36s
CI / benchmark-regression (push) Has been skipped
CI / unit_tests (push) Successful in 3m38s
CI / docker (push) Successful in 39s
CI / integration_tests (push) Successful in 4m25s
CI / coverage (push) Successful in 4m19s
CI / benchmark-publish (push) Successful in 15m57s
CI / benchmark-regression (pull_request) Successful in 28m50s
2026-03-05 21:38:56 +00:00
Compare
freemo merged commit fae438a7a7 into master 2026-03-05 21:43:55 +00:00
freemo deleted branch refactor/unify-context-fragment-models 2026-03-05 21:43:55 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cleveragents/cleveragents-core!598
No description provided.