Files
Umbraco-CMS/thoughts/shared/handoffs/general/2025-12-14_02-34-25_phase1-publishing-pipeline.md
yv01p 9962df50ee feat(core): register IContentCrudService in DI container
Adds IContentCrudService registration to UmbracoBuilder alongside
IContentService. Both services are now resolvable from DI.

Includes integration test verifying successful resolution.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-21 03:31:23 +00:00

6.1 KiB

date, researcher, git_commit, branch, repository, topic, tags, status, last_updated, last_updated_by, type
date researcher git_commit branch repository topic tags status last_updated last_updated_by type
2025-12-14T02:34:25+0000 Claude 41ecbd1bc1122c87ee63fb47a732cebe8699a0e2 refactor/ContentService Umbraco-CMS Phase 1 Publishing Pipeline Implementation
implementation
publishing-pipeline
contentservice-refactoring
subagent-driven-development
in_progress 2025-12-14 Claude implementation_strategy

Handoff: Phase 1 Publishing Pipeline Implementation

Task(s)

Implementing Phase 1 of the ContentService publishing pipeline refactoring using subagent-driven development.

Plan Document: docs/plans/2025-12-13-phase-1-implementation-fixes.md

Task Status (11 total)

Task Description Status
1 Update Phase 1 Design with ICultureImpactFactory Dependency Completed
2 Document Pipeline Order Decision Completed
3 Document PublishAction Enum Omission Completed
4 Update IPublishingStrategy Interface Completed
5 Implement PublishingStrategy with Repository Completed (code review passed)
6 Create BatchValidationContext Pending - next up
7 Implement PublishingValidator with Parallel Processing Pending
8 Implement PublishingExecutor with Repository Batch Operations Pending
9 Create Integration Tests Comparing Pipeline to Legacy Pending
10 Update Benchmark to Use .NET 10.0 Pending
11 Add ContentValidationResult with Factory Methods Pending

Current Phase: Task 6 is next

Critical References

  1. Implementation Plan: docs/plans/2025-12-13-phase-1-implementation-fixes.md - The detailed implementation plan with code snippets for each task
  2. Design Document: docs/plans/2025-12-13-phase-1-publishing-pipeline-design.md - Phase 1 architectural design
  3. Main Design: docs/plans/2025-12-04-contentservice-refactoring-design.md - Overall ContentService refactoring design

Recent changes

  • f1401e8dd5: docs: add ICultureImpactFactory to Phase 1 validator dependencies
  • b7045649c9: docs: document pipeline order difference for branch publishing
  • ca448fd7c2: docs: document PublishAction enum omission in Phase 1
  • a7b5f1d043: feat(core): add IPublishingStrategy interface
  • 4fc6c009da: test(perf): add PublishBranch performance baseline tests
  • 41ecbd1bc1: feat(core): implement PublishingStrategy with IDocumentRepository

Learnings

  1. Implementation goes in Infrastructure, not Core: The plan specified implementation in Umbraco.Core, but ISqlContext dependency requires implementation in Umbraco.Infrastructure. Interface stays in Core, implementation goes to Infrastructure.

  2. InternalsVisibleTo required: Added InternalsVisibleTo for Umbraco.Infrastructure in Umbraco.Core.csproj so Infrastructure can access internal types like PublishingPlan.

  3. Baseline performance established: Legacy PublishBranch performance at 50 items = 62.7 items/sec. Target is 2x = 125+ items/sec.

  4. Test mocking pattern: For VariesByCulture() extension method, mock the underlying Variations property on ISimpleContentType, not the extension method directly.

  5. ContentType creation in tests: Don't use ContentTypeBuilder. Use direct instantiation: new ContentType(ShortStringHelper, -1) { Alias = "...", Name = "...", Variations = ContentVariation.Nothing }

Artifacts

Created/Modified Files:

  • docs/plans/2025-12-13-phase-1-publishing-pipeline-design.md:87 - Added ICultureImpactFactory dependency
  • docs/plans/2025-12-13-phase-1-publishing-pipeline-design.md:168 - Added PublishAction omission note
  • docs/plans/2025-12-04-contentservice-refactoring-design.md:36 - Added decision #10 for pipeline order
  • docs/plans/2025-12-04-contentservice-refactoring-design.md:131-152 - Updated Component Flow section
  • docs/plans/2025-12-14-phase-1-baseline-performance.md - Performance baseline document
  • src/Umbraco.Core/Services/Publishing/IPublishingStrategy.cs - Interface (27 lines)
  • src/Umbraco.Infrastructure/Services/Publishing/PublishingStrategy.cs - Implementation (238 lines)
  • src/Umbraco.Core/Umbraco.Core.csproj - Added InternalsVisibleTo
  • tests/Umbraco.Tests.UnitTests/Umbraco.Core/Services/Publishing/PublishingStrategyTests.cs - Unit tests (159 lines)
  • tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentServicePublishBranchPerformanceTests.cs - Performance tests (121 lines)

Action Items & Next Steps

  1. Resume from Task 6: Read the plan at docs/plans/2025-12-13-phase-1-implementation-fixes.md and continue with Task 6 (Create BatchValidationContext)

  2. Follow TDD pattern: For each task, write failing test first, then implementation, then verify tests pass, then commit

  3. Use code review after implementation tasks: After Tasks 6, 7, 8 (the main implementation tasks), dispatch a code-reviewer subagent

  4. Run performance tests after all tasks: Compare against baseline (62.7 items/sec target: 125+ items/sec)

  5. Remaining tasks (6-11):

    • Task 6: Create BatchValidationContext record
    • Task 7: Implement PublishingValidator with parallel processing
    • Task 8: Implement PublishingExecutor with repository batch operations
    • Task 9: Create integration tests comparing pipeline to legacy
    • Task 10: Update benchmark to use .NET 10.0
    • Task 11: Add ContentValidationResult with factory methods

Other Notes

Skill in use: superpowers:subagent-driven-development - Dispatches fresh subagent per task with code review between tasks.

Baseline test command:

dotnet test tests/Umbraco.Tests.Integration \
  --filter "FullyQualifiedName~ContentServicePublishBranchPerformanceTests" \
  -v normal

Existing tests to verify (125 pass):

  • ContentServicePublishBranchTests: 20 tests
  • ContentPublishingServiceTests: 105 tests

Key directories:

  • Pipeline types: src/Umbraco.Core/Services/Publishing/
  • Pipeline implementations: src/Umbraco.Infrastructure/Services/Publishing/
  • Unit tests: tests/Umbraco.Tests.UnitTests/Umbraco.Core/Services/Publishing/
  • Integration tests: tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/