Skip to content

Legacy default parity

This is the executable specification for issue #179. The rows live in symfonic.migration.LEGACY_DEFAULT_ROWS; tests/migration/test_legacy_defaults.py pins that every legacy field is present and that each one has either a same-turn legacy/native comparison or an existing owner.

FrameworkConfig defaults do not all start work. “Inert” means the field does not independently run a behaviour; it is recorded here so an adopter does not try to recreate a behaviour that the legacy agent did not run.

Legacy field or active companion Trigger Kernel composition / result Evidence or owner
auto_hydrate bound store and scope candidate: memory_capabilities + PromptingCapability gap, #188: native-only test
auto_consolidate MemoryExtractorPort candidate: memory_capabilities(..., extractor=...) gap, #185: native-only test
spreading_activation AssociationSource candidate: SpreadingActivation through memory factory gap, #188: native-only test
lazy_tooling HMS prompt, procedural skills, tools gap #185
enabled_layers memory retrieval candidate: default RetrievalPolicy gap, #188: default-value comparison only
skill_auto_approve promotable skill gap #185
streaming_enabled always Agent.stream() verified: same-turn deterministic stream completes on both paths
experimental_tool_decorator never retained no-op; @symfonic_tool is unconditional config source
phase_12_action_type_from_tool_calls phase-12 extraction gap #185
messages_cache_policy provider cache dialect gap #187
manifest_cache_position stratigraphic prompt mode gap #187
system_prefix_cache_ttl compatible provider cache gap #187
tool_result_recall_mode tool-result history gap #188
activation_log_mode activation runs gap #188
prompt_layer_mode legacy prompt path gap #187
hms_budget_mode HMS prompt assembly gap #187
memory_extract_cadence every turn; default 1 no prompt-cadence consumer gap, #187
entity_linker_extractor enable_entity_linker=True inactive until that flag #186
nightly_nap_cron never operator recommendation, not engine scheduling config source
phase_12_llm_model LLM phase-12 extraction gap #185
otel_service_name otel_enabled=True and an OTEL sink inactive until OTEL is composed #191
working_memory_recent_turns ConversationSource candidate: memory factory conversation=/recent_turns= gap, #188: native-only test
quick_nap_interval ConsolidationCoordinator candidate: memory factory consolidation= gap, #185: native-only test

The verified subset contains only streaming. It deliberately has no memory, prompting, retrieval, write, or consolidation stages:

from symfonic.migration import SUPPORTED_DEFAULT_BEHAVIORS, compose_legacy_defaults

agent = compose_legacy_defaults(
    provider,
    behaviors=SUPPORTED_DEFAULT_BEHAVIORS,
)

The runnable import-shaped example is examples.migration_parity.composed_defaults.build_agent. A bare compose_legacy_defaults(provider) reports every unresolved field and all missing deployment dependencies in one error. Neither outcome means issue #179 is ready to close.