Skip to content

refactor(facade): migrate all interfaces to single-core facade (F108)#374

Merged
pocky merged 1 commit into
mainfrom
feature/F108
Jun 16, 2026
Merged

refactor(facade): migrate all interfaces to single-core facade (F108)#374
pocky merged 1 commit into
mainfrom
feature/F108

Conversation

@pocky

@pocky pocky commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Migrate all interfaces (CLI, API, TUI) to the single-core facade introduced in F107, replacing direct service wiring with FacadeAdapter-based access throughout every command and handler
  • Remove InputBridge and ACP input_reader abstractions, consolidating input handling into the new SessionInputReader in the application layer
  • Delete ~29k lines of legacy integration tests that tested implementation details now covered by the facade contract, replacing them with focused facade-conformance and feature tests
  • Expand the FacadeAdapter surface with reader, resume, and status sub-adapters; add NopRecorder, SyncWriter, and RunFacadeProjector to support the new wiring across all execution paths

Changes

Domain — Facade Ports

  • internal/domain/ports/facade.go: Expand facade interface definitions for reader, resume, and status capabilities
  • internal/domain/ports/facade_dto.go: Add/adjust DTOs used by new facade sub-interfaces
  • internal/domain/ports/facade_event.go: Align event types with facade-based event propagation
  • internal/domain/ports/facade_contract_test.go: Update contract tests to cover new interface surface
  • internal/domain/transcript/payload.go: Add fields required by facade transcript integration
  • internal/domain/workflow/audit_event.go: Minor alignment with new facade event model
  • internal/domain/workflow/audit_event_test.go: Add tests for updated audit event fields

Application — Facade Adapter & Session Layer

  • internal/application/facade_adapter.go: Extend FacadeAdapter with reader, resume, and status sub-adapters
  • internal/application/facade_adapter_reader_test.go: New tests for reader facade surface
  • internal/application/facade_adapter_resume_test.go: New tests for resume facade surface
  • internal/application/facade_adapter_status_test.go: New tests for status facade surface
  • internal/application/facade_adapter_test.go: Update existing adapter tests for new surface
  • internal/application/facade_projection.go: Align projection logic with new facade DTOs
  • internal/application/facade_projection_test.go: Update and expand projection tests
  • internal/application/session_input_reader.go: New — consolidates input reading into a single application-layer type, replacing InputBridge and ACP input_reader
  • internal/application/session_input_reader_test.go: Tests for SessionInputReader
  • internal/application/input_bridge.go: Deleted — superseded by SessionInputReader
  • internal/application/input_bridge_test.go: Deleted
  • internal/application/acp_session.go: Migrate to facade-based input reading
  • internal/application/acp_session_service.go: Migrate to facade-based wiring; remove parking-lot session pattern
  • internal/application/acp_session_service_parking_test.go: Deleted — pattern removed
  • internal/application/acp_session_service_test.go: Rewrite to test facade-based session service
  • internal/application/acp_subscribe_static_test.go: New tests for static ACP subscription path
  • internal/application/acp_test_helpers_test.go: New shared helpers for ACP application tests
  • internal/application/acp_audit_fixes_test.go: Update for facade-based audit wiring
  • internal/application/acp_session_test.go: Update session tests for new input reader
  • internal/application/conversation_manager.go: Align with facade adapter changes
  • internal/application/drain.go: Align with new session wiring
  • internal/application/error_codes.go: Consolidate error code definitions; remove duplicates
  • internal/application/error_codes_test.go: Trim tests for removed error codes
  • internal/application/execution_service.go: Wire facade-based execution path
  • internal/application/execution_service_transcript.go: Align transcript wiring with facade
  • internal/application/execution_setup.go: Update setup for new resolver wiring
  • internal/application/history_service.go: Migrate to facade-based history access
  • internal/application/resolver.go: Update resolver for facade-based dependency injection
  • internal/application/resolver_wire.go: Rewire resolver composition for facade pattern
  • internal/application/resolver_wire_test.go: Update resolver wiring tests
  • internal/application/resolver_test.go: Update resolver unit tests
  • internal/application/run_session.go: Migrate run session to new input reader
  • internal/application/service.go: Migrate workflow service to facade wiring
  • internal/application/service_validate_options_test.go: New tests for service option validation
  • internal/application/session_registry.go: Align registry with new session types
  • internal/application/test_helpers.gointernal/application/test_helpers_test.go: Move test helpers to test-only file
  • internal/application/execution_service_*_test.go (20 files): Update all execution service tests to facade-based construction

Infrastructure — Input, Transcript & Agents

  • internal/infrastructure/acp/input_reader.go: Deleted — input reading moved to application layer
  • internal/infrastructure/acp/input_reader_test.go: Deleted
  • internal/infrastructure/acp/agent_test.go: Update for removed input reader
  • internal/infrastructure/acp/doc.go: Update package doc to reflect removed types
  • internal/infrastructure/acp/doc_test.go: Align with updated package doc
  • internal/infrastructure/transcript/nop_recorder.go: New no-op transcript recorder for test and dry-run paths
  • internal/infrastructure/transcript/nop_recorder_test.go: Tests for NopRecorder
  • internal/infrastructure/transcript/fanout.go: Align fanout with new recorder interface
  • internal/infrastructure/agents/helpers.go: Add shared provider helper utilities
  • internal/infrastructure/agents/helpers_test.go: Tests for new helper utilities
  • internal/infrastructure/agents/claude_provider_test.go: Update for facade-based test construction
  • internal/infrastructure/agents/codex_provider_test.go: Update for facade-based test construction
  • internal/infrastructure/agents/codex_provider_validation_unit_test.go: Update validation tests
  • internal/infrastructure/agents/gemini_provider_test.go: Update for facade-based test construction
  • internal/infrastructure/agents/opencode_provider_test.go: Update for facade-based test construction
  • internal/infrastructure/errors/human_formatter.go: Align with updated error code taxonomy
  • internal/infrastructure/errors/human_formatter_test.go: Add tests for new formatter behavior
  • internal/infrastructure/pluginmgr/installer.go: Add graceful shutdown before binary removal
  • internal/infrastructure/pluginmgr/installer_test.go: Update installer tests
  • internal/infrastructure/pluginmgr/rpc_manager.go: Add connection cleanup hooks
  • internal/infrastructure/pluginmgr/rpc_manager_test.go: Add RPC manager lifecycle tests

Interfaces — CLI

  • internal/interfaces/cli/run.go: Migrate run command to facade-based execution
  • internal/interfaces/cli/run_facade_projector.go: New — RunFacadeProjector wires run output through facade projection
  • internal/interfaces/cli/run_t068_test.go: New regression test for T068 run path
  • internal/interfaces/cli/resume.go: Migrate resume command to facade reader/status
  • internal/interfaces/cli/status.go: Migrate status command to facade status adapter
  • internal/interfaces/cli/history.go: Migrate history command to facade history adapter
  • internal/interfaces/cli/list.go: Migrate list command to facade
  • internal/interfaces/cli/validate.go: Migrate validate command to facade
  • internal/interfaces/cli/acp_serve.go: Migrate ACP serve command to facade session wiring
  • internal/interfaces/cli/serve.go: Align serve command with facade
  • internal/interfaces/cli/config.go: Update CLI config wiring for facade
  • internal/interfaces/cli/workflow_cmd.go: Update workflow command for facade
  • internal/interfaces/cli/ui/sync_writer.go: New — thread-safe writer for concurrent CLI output
  • internal/interfaces/cli/ui/colors.go: Align color helpers with new UI patterns
  • internal/interfaces/cli/pack_test_helpers_test.go: New shared pack test helpers
  • internal/interfaces/cli/validate_batch_delegation_test.go: New batch delegation tests for validate
  • internal/interfaces/cli/collect_pack_workflows_test.go: Deleted — covered by new delegation tests
  • internal/interfaces/cli/validate_skip_plugins_test.go: Deleted — covered by facade conformance tests
  • internal/interfaces/cli/history_internal_test.go: Trimmed to remove dead internal tests
  • internal/interfaces/cli/run_internal_test.go: Trimmed to remove dead internal tests
  • internal/interfaces/cli/status_internal_test.go: Update internal status tests for facade
  • internal/interfaces/cli/acp_serve_lifecycle_test.go: Update lifecycle tests for facade ACP serve
  • internal/interfaces/cli/acp_serve_test.go: New ACP serve facade tests
  • internal/interfaces/cli/resume_test.go, resume_list_test.go: Update for facade resume
  • internal/interfaces/cli/history_test.go, list_test.go, run_test.go, status_test.go, validate_test.go: Update for facade-based commands
  • internal/interfaces/cli/wiring_transcript_test.go: Update transcript wiring tests
  • internal/interfaces/cli/run_interactive_config_test.go, run_wiring_validator_test.go, validate_mcp_proxy_test.go, validate_pack_test.go, validate_helpers_test.go, list_coverage_test.go: Update for facade migration

Interfaces — API

  • internal/interfaces/api/bridge.go: Migrate API bridge to facade adapter
  • internal/interfaces/api/handlers_executions.go: Migrate execution handlers to facade
  • internal/interfaces/api/handlers_history.go: Migrate history handlers to facade
  • internal/interfaces/api/handlers_workflows.go: Migrate workflow handlers to facade
  • internal/interfaces/api/sse.go: Align SSE streaming with facade event propagation
  • internal/interfaces/api/server.go: Align server setup with facade wiring
  • internal/interfaces/api/respond_handler.go: Add response helper for facade results
  • internal/interfaces/api/doc.go: Update API package documentation
  • internal/interfaces/api/read_facade_test.go: New tests for API read facade surface
  • internal/interfaces/api/bridge_test.go, handlers_executions_test.go, handlers_history_test.go, handlers_workflows_test.go, respond_handler_test.go, server_test.go, sse_test.go: Update all API tests for facade migration

Interfaces — TUI

  • internal/interfaces/tui/bridge.go: Migrate TUI bridge to facade adapter
  • internal/interfaces/tui/command.go: Align TUI command dispatch with facade
  • internal/interfaces/tui/messages.go: Align TUI messages with facade event types
  • internal/interfaces/tui/model.go: Update TUI model for facade-based state access
  • internal/interfaces/tui/tab_monitoring.go: Migrate monitoring tab to facade status/events
  • internal/interfaces/tui/doc.go: Update TUI package documentation
  • internal/interfaces/tui/bridge_test.go, command_test.go, messages_test.go, model_test.go, tab_monitoring_test.go, tab_workflows_test.go: Update all TUI tests for facade migration

Test Utilities

  • internal/testutil/facadetest/facadetest.go: Extend facade test harness for new sub-adapters
  • internal/testutil/facadetest/facadetest_test.go: Update facadetest tests
  • internal/testutil/mocks/mocks.go: Trim mocks no longer needed after facade migration
  • internal/testutil/mocks/mocks_hints_test.go: Deleted — hints mock pattern removed
  • internal/testutil/mocks/mocks_test.go: Remove tests for deleted mocks
  • internal/testutil/mocks/mocks_agent_test.go, mocks_cli_executor_test.go: Update surviving mock tests
  • internal/testutil/builders/builders_test.go: Update builder tests
  • internal/testutil/fixtures/fixtures.go, fixtures_test.go: Align fixtures loader with facade test harness
  • internal/testutil/doc.go: Update testutil package documentation

Integration Tests — Deleted (covered by facade conformance)

  • tests/integration/execution/** (13 files): Deleted — execution scenarios now covered via facade conformance tests
  • tests/integration/loops/** (6 files): Deleted — loop scenarios now covered via facade conformance tests
  • tests/integration/subworkflows/** (2 files): Deleted
  • tests/integration/features/hooks_test.go, on_failure_inline_test.go, secret_masking_test.go, template_test.go: Deleted
  • tests/integration/api/functional_test.go, pack_workflow_test.go, server_integration_test.go: Deleted
  • tests/integration/cleanup/test_cleanup_functional_test.go: Deleted
  • tests/integration/event_feature_functional_test.go, event_lifecycle_integration_test.go: Deleted
  • tests/integration/agents/display_matrix_test.go: Deleted
  • tests/integration/plugins/http_operation_test.go, notify_plugin_test.go: Deleted
  • tests/integration/state/history_test.go: Deleted
  • tests/integration/tracing/tracing_test.go: Deleted
  • tests/integration/validation/input_validation_functional_test.go, input_validation_test.go: Deleted

Integration Tests — Updated

  • tests/integration/features/cli_test.go, conversation_test.go, conversation_validation_test.go, facade_conformance_test.go, facade_resume_test.go, interactive_conversation_test.go, interactive_test.go, session_resume_test.go: Migrate to facade-based test harness
  • tests/integration/cli/** (7 files): Update all CLI integration tests for facade
  • tests/integration/agents/c065_provider_options_audit_test.go, display_events_integration_test.go: Update for facade
  • tests/integration/agents/test_helpers_test.go: New shared helpers for agent integration tests
  • tests/integration/cli/cli_test_helpers_test.go: Update shared CLI integration helpers
  • tests/integration/errors/error_codes_test.go, error_output_streams_test.go: Update error integration tests
  • tests/integration/plugins/github_plugin_test.go, notify_plugin_backend_removal_test.go, plugin_test.go, test_helpers_test.go: Update plugin integration tests
  • tests/integration/skills/validate_command_skills_test.go: Update for facade validate
  • tests/integration/tui/tui_functional_test.go, tui_test.go: Update TUI integration tests
  • tests/integration/validation/casing_validation_test.go, validation_providers_test.go: Update validation integration tests
  • tests/integration/test_helpers_test.go, testhelpers/helpers.go: Update shared integration test infrastructure

Fixtures & Config

  • tests/fixtures/facade/acp-session-update.golden, cli-stdout.golden, sse-frames.golden, tui-tea-msg.golden: Update golden files for new facade output format
  • tests/fixtures/workflows/agent-*.yaml, conversation-*.yaml, expr-agent-fields.yaml: Align workflow fixtures with updated provider options
  • tests/fixtures/api/api-failing.yaml: Update API fixture
  • .go-arch-lint.yml: Register new packages in architecture lint rules
  • CHANGELOG.md: Add F108 entry
  • .zpm/kb/default/journal.lock, .zpm/kb/feedback/journal.lock: Initialize ZPM knowledge-base journal locks
  • pkg/stringutil/levenshtein.go, levenshtein_test.go: Expose Levenshtein distance utility used in facade error suggestions

Test plan

  • make build — verify binary compiles clean with no import errors after all interface migrations
  • make test-unit — all 53+ unit test packages pass with zero failures
  • make test-integration — facade conformance, CLI, TUI, and API integration tests pass
  • make lint — zero violations, including .go-arch-lint.yml architecture constraints

Closes #373


Generated with awf commit workflow

- `.go-arch-lint.yml`: Register new facade dependencies
- `internal/application/session_input_reader.go`: Add SessionInputReader consolidating ACP and CLI input handling
- `internal/application/session_input_reader_test.go`: Add unit tests for SessionInputReader
- `internal/application/facade_adapter.go`: Expand facade adapter with read, resume, and status operations
- `internal/application/facade_adapter_reader_test.go`: Add facade reader tests
- `internal/application/facade_adapter_resume_test.go`: Add facade resume tests
- `internal/application/facade_adapter_status_test.go`: Add facade status tests
- `internal/application/facade_projection.go`: Update projection to cover new facade events
- `internal/application/acp_session_service.go`: Refactor to use SessionInputReader via facade
- `internal/application/acp_session.go`: Align ACP session with new input reader pattern
- `internal/application/acp_subscribe_static_test.go`: Add static subscription tests
- `internal/application/acp_test_helpers_test.go`: Add shared ACP test helpers
- `internal/application/service_validate_options_test.go`: Add validate options coverage
- `internal/application/run_session.go`: Route run session through facade adapter
- `internal/application/service.go`: Wire SessionInputReader into workflow service
- `internal/application/resolver.go`: Update resolver for facade-based wiring
- `internal/application/resolver_wire.go`: Align wire config with facade dependencies
- `internal/application/execution_service.go`: Adapt execution service to facade contracts
- `internal/application/execution_service_transcript.go`: Update transcript integration
- `internal/application/drain.go`: Update drain to use facade event types
- `internal/application/conversation_manager.go`: Align conversation manager with facade DTOs
- `internal/application/history_service.go`: Migrate history service to facade read path
- `internal/application/error_codes.go`: Update error codes for facade alignment
- `internal/domain/ports/facade.go`: Expand facade port with reader and status contracts
- `internal/domain/ports/facade_dto.go`: Add DTOs for read, resume, and status responses
- `internal/domain/ports/facade_event.go`: Extend facade event types
- `internal/domain/ports/facade_contract_test.go`: Update contract tests for new methods
- `internal/domain/transcript/payload.go`: Add payload fields for facade transcript events
- `internal/domain/workflow/audit_event.go`: Minor audit event alignment
- `internal/infrastructure/acp/input_reader.go`: Remove (consolidated into SessionInputReader)
- `internal/infrastructure/acp/input_reader_test.go`: Remove (superseded by session_input_reader_test)
- `internal/infrastructure/transcript/nop_recorder.go`: Add no-op recorder for test isolation
- `internal/infrastructure/transcript/nop_recorder_test.go`: Add nop recorder tests
- `internal/infrastructure/transcript/fanout.go`: Update fanout for new recorder interface
- `internal/infrastructure/agents/helpers.go`: Add shared agent helper utilities
- `internal/infrastructure/agents/helpers_test.go`: Add helper tests
- `internal/infrastructure/errors/human_formatter.go`: Update human formatter output
- `internal/infrastructure/pluginmgr/installer.go`: Add plugin installer improvements
- `internal/infrastructure/pluginmgr/rpc_manager.go`: Add rpc manager updates
- `internal/interfaces/api/bridge.go`: Migrate API bridge to facade read/status/resume
- `internal/interfaces/api/handlers_executions.go`: Rewrite execution handlers via facade
- `internal/interfaces/api/handlers_history.go`: Migrate history handlers to facade
- `internal/interfaces/api/handlers_workflows.go`: Migrate workflow handlers to facade
- `internal/interfaces/api/sse.go`: Rewrite SSE streaming through facade events
- `internal/interfaces/api/server.go`: Update server wiring for facade-based handlers
- `internal/interfaces/api/read_facade_test.go`: Add read facade integration tests
- `internal/interfaces/cli/run.go`: Rewrite run command using facade adapter
- `internal/interfaces/cli/run_facade_projector.go`: Add CLI facade projector for run output
- `internal/interfaces/cli/run_t068_test.go`: Add T068 regression test for run via facade
- `internal/interfaces/cli/status.go`: Migrate status command to facade read path
- `internal/interfaces/cli/resume.go`: Migrate resume command to facade
- `internal/interfaces/cli/history.go`: Migrate history command to facade
- `internal/interfaces/cli/list.go`: Migrate list command to facade
- `internal/interfaces/cli/validate.go`: Migrate validate command to facade batch delegation
- `internal/interfaces/cli/validate_batch_delegation_test.go`: Add batch delegation tests
- `internal/interfaces/cli/acp_serve.go`: Update ACP serve to use facade session wiring
- `internal/interfaces/cli/config.go`: Wire SessionInputReader in CLI config
- `internal/interfaces/cli/ui/sync_writer.go`: Add thread-safe writer for concurrent output
- `internal/interfaces/cli/pack_test_helpers_test.go`: Add shared pack test helpers
- `internal/interfaces/cli/wiring_transcript_test.go`: Add transcript wiring tests
- `internal/interfaces/tui/bridge.go`: Rewrite TUI bridge via facade events
- `internal/interfaces/tui/command.go`: Migrate TUI command to facade
- `internal/interfaces/tui/tab_monitoring.go`: Update monitoring tab for facade event types
- `internal/interfaces/tui/model.go`: Align TUI model with facade DTOs
- `internal/interfaces/tui/messages.go`: Update TUI messages for facade event mapping
- `internal/testutil/facadetest/facadetest.go`: Extend facade test harness
- `internal/testutil/mocks/mocks.go`: Remove hints mock and outdated mocks
- `pkg/stringutil/levenshtein.go`: Add Levenshtein distance utility
- `pkg/stringutil/levenshtein_test.go`: Add Levenshtein tests
- `internal/application/input_bridge.go`: Remove (replaced by SessionInputReader)
- `tests/integration/execution/*` (13 files): Remove — coverage absorbed by facade unit tests
- `tests/integration/loops/*` (6 files): Remove — coverage absorbed by facade unit tests
- `tests/integration/api/*` (3 files): Remove — replaced by facade-based API tests
- `tests/integration/features/hooks_test.go`: Remove — superseded by facade hooks coverage
- `tests/integration/features/secret_masking_test.go`: Remove — superseded
- `tests/integration/features/template_test.go`: Remove — superseded
- `tests/integration/features/on_failure_inline_test.go`: Remove — superseded
- `tests/integration/subworkflows/*` (2 files): Remove — superseded
- `tests/integration/tracing/tracing_test.go`: Remove — superseded
- `tests/fixtures/facade/*.golden`: Update golden files for new facade event shapes
- `tests/fixtures/workflows/*.yaml`: Sync workflow fixtures with updated field names

Closes #373
@pocky pocky marked this pull request as ready for review June 16, 2026 21:44
@pocky pocky merged commit 180db9e into main Jun 16, 2026
5 checks passed
@pocky pocky deleted the feature/F108 branch June 16, 2026 21:45
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.

F108: F107 Facade Completion (GREEN) Across All Interfaces

1 participant