Skip to content

Dossiers de decisión v11 — transiciones de Agent

Estado verificable

Este documento prepara CORE-13; no constituye una aprobación. Se deriva de docs/concepts/feature-preservation-inventory.json, del contrato FP-5 y de las pruebas y símbolos que se nombran abajo.

Medición actual con _blocking_rows(_contract()): 34 blockers. De ellos, 28 tienen estado behavior-changed o removed-without-equivalent y exigen aprobación individual. approved_changes contiene 0 registros. Los seis blockers restantes no se resuelven por una aprobación de transición.

Para cerrar una fila, CORE-1 debe añadir una entrada individual con row, owner, decision y transition_nodes. El gate exige que los nodos pertenezcan al outcome de esa misma fila, estén ejecutados y cubran la prueba declarada por el inventario. Una evidencia prestada está rechazada por scripts/feature_preservation_gate.py::_contract.

Convenciones. RESTORE = recuperar el observable legacy y probarlo; APPROVE CHANGE = aceptar el observable nativo explícito distinto; APPROVE REMOVAL = aceptar que no hay equivalente y registrar la mitigación. Las disposiciones son recomendaciones, no aprobaciones.

A. Gobernanza: policy explícita sustituye flags legacy

Decisión compartida: aprobar la composición explícita sólo si conserva los límites de seguridad indicados por cada prueba de aceptación.

Fila Legacy / observable Evidencia Agent/Kernel Recomendación Riesgo Prueba de aceptación
metacognition_confidence_threshold Umbral selective gate / invocación de crítico. SelectiveMetacognitionPolicy; governance(... confidence_floor), capabilities/governance/stages/metacognition_policy.py. APPROVE CHANGE Complementa hard floors. test_subject_confidence_precedes_reporter_and_an_invalid_subject_stays_loud; comparar debajo/en/el umbral.
metacognition_gate Predicado CriticGateContext / decisión de review. trigger_policy, governance(trigger_policy=...), capabilities/governance/stages/metacognition.py. APPROVE CHANGE Firma/contexto cambian. test_public_custom_policy_is_the_explicit_opt_out_seam; predicado y negación.
metacognition_selective_gate Flag selective / review u omisión. Default SelectiveMetacognitionPolicy. APPROVE CHANGE Spelling antiguo rechazado. test_public_selective_policy_preserves_the_three_regression_probes; tres probes.
metacognition_sensitive_tags Tag recuperado fuerza review / crítico invocado. Proyección MemoryRecord.metadata['tags'], capabilities/memory/recall_evidence.py. APPROVE CHANGE Sólo clasificación cruza; payload sigue privado. test_public_agent_distinguishes_native_recalled_tags_from_draft_terms; tag recuperado vs término draft.
metacognition_trivial_ack_patterns Patrones custom omiten review. SelectiveMetacognitionPolicy.trivial_ack_patterns. APPROVE CHANGE Reemplazan, no extienden, defaults. test_public_custom_ack_patterns_replace_the_default_set; reemplazo y no-unión.
credential_patterns Regex custom/disable / argumentos scrubbed. CredentialHygieneStage, governance(patterns=...), capabilities/governance/stages/credentials.py. APPROVE CHANGE Custom reemplaza built-ins; disable separado. test_custom_credential_pattern_scrubs_its_configured_key_only; custom, builtin y disable.
fabrication_refuse_min_confidence Un umbral refuse/allow. FabricationStage, governance(min_confidence=..., refuse_min_confidence=...). APPROVE CHANGE Dos umbrales. TestFabrication::test_refusal_floor_includes_its_exact_boundary; matriz de límites.
read_only_tools Exclusión de herramientas read-only / decisión crítica. governance(read_only_tools=...), metacognition_policy.py. APPROVE CHANGE Nombres deben coincidir con registry. test_public_tool_evidence_distinguishes_mutating_and_read_only; nombre existente y desconocido.

Todos los selectores abreviados de esta sección están en tests/platform/test_metacognition_preservation.py, salvo tests/platform/test_governance_amends.py::test_custom_credential_pattern_scrubs_its_configured_key_only y tests/capabilities/governance/test_egress_stages.py::TestFabrication::test_refusal_floor_includes_its_exact_boundary.

B. Prompt y caché: bytes equivalentes o cambio aprobado

Decisión compartida: una ruta nueva no prueba equivalencia de prompt. Las filas RESTORE exigen fixture legacy representativa y comparación de bytes/selección antes de cambiar la disposición.

Fila Legacy / observable Evidencia Agent/Kernel Recomendación Riesgo Prueba de aceptación
extraction_template_path Path HMS; directiva MEMORY_EXTRACT/GRAPH_OPERATIONS, persistencia sin reply leak. ExtractionDirectiveSource + LegacyGraphOperationsAdapter, capabilities/memory/legacy_extraction.py. APPROVE CHANGE Retracciones/ops no documentadas caen a fallback. tests/capabilities/memory/test_extraction_in_the_turn.py::test_bundled_legacy_directive_persists_through_the_explicit_adapter; bundled y operación no soportada.
hms_budget_mode warn/strict; continuar/fallar y bytes. PromptBudget, agent/cutover/prompt_assembly_policy.py; prueba nativa test_core15_measurable_native_evidence.py::test_hms_budget_mode_changes_a_direct_agents_overflow_outcome. RESTORE Orden de descarte difiere. tests/agent/cutover/test_prompt_assembly_lane.py; replay over-budget, excepción/continuación y regiones.
hms_system_prompt_token_budget Cap HMS-string / prompt al modelo. RegionalPromptPolicy.hms_system_prompt_token_budget, capabilities/prompting/regional.py. APPROVE CHANGE FrameworkConfig legacy rechazado por cutover. test_issue187_regional_prompt_policy.py::test_hms_region_is_pinned_against_the_total_prompt_budget; bytes para configuración adoptada.
jit_manifest_token_budget Cap JIT manifest / asignación manifest-prompt. RegionalPromptPolicy.jit_manifest_token_budget. APPROVE CHANGE Template JIT y keyword filtering no adaptados. test_issue187_regional_prompt_policy.py::test_public_agent_sends_bounded_domain_and_independent_manifest_bytes; replay de adaptadores o exclusión explícita.
manifest_cache_position Marker de caché fijo / marker proveedor. Regiones L1/L2; NativeCacheComposition no acepta setting, prompt_assembly_policy.py. RESTORE Selección legacy/tool binding difieren. test_public_manifest_regions_keep_volatile_tail_outside_cached_marker; misma entrada, selección y marker.
memory_extract_cadence Directiva N-turn / visibilidad por scope/sesión. ExtractionDirectiveSource(cadence, scope_path), capabilities/prompting/extraction.py. APPROVE CHANGE N>1 anónimo se omite sin frontera segura. test_extraction_directive_source.py::test_public_agent_renders_only_the_due_session_turn_to_the_model; sesión estable y anónima.
messages_cache_policy Rolling history cache / provider cache multi-turn. Opt-in nativo #221; adapter default sin historia anotada, prompt_assembly_policy.py. APPROVE REMOVAL Regresión coste/latencia; system cache no es history cache. test_public_two_turn_cache_reaches_anthropic_wire_with_ttl_marker; medir dos turnos y declarar mitigación/opt-in.
domain Template nested completo / bytes system prompt. hms_source_for_domain(...) proyecta descripción, regional.py. APPROVE CHANGE Tools/governance cambian de owner. test_public_agent_sends_bounded_domain_and_independent_manifest_bytes; separar prompt, tools y governance.
domain_description_max_chars Límites JIT/no-JIT / truncación. RegionalPromptPolicy.domain_description_max_chars, bounded_domain_description(...). APPROVE CHANGE JIT template legacy no adaptado. test_domain_caps_remain_separate_for_full_hms_and_jit; ambos límites.

Los selectores sin ruta completa en esta tabla son: tests/capabilities/prompting/test_issue187_regional_prompt_policy.py::<selector>, tests/platform/test_fp3_public_preservation_journeys.py::<selector> y tests/capabilities/prompting/test_extraction_directive_source.py::<selector>.

C. Recuperación y memoria: policy explícita no implica el mismo resultado

Decisión compartida: la aceptación requiere una ruta pública Agent con corpus equivalente; una unidad de policy no prueba preservación de composición.

Fila Legacy / observable Evidencia Agent/Kernel Recomendación Riesgo Prueba de aceptación
scorer_on_hot_path Switch ranking / orden recall compilado. RetrievalCoordinator, memory_capabilities(retrieval=...), capabilities/memory/factory.py. APPROVE CHANGE Boolean no existe; fuente declara pre_ranked. test_issue188_public_retrieval_contracts.py::test_public_agent_same_scenario_uses_scorer_or_pre_ranked_order; mismo corpus, dos fuentes.
hydration_min_relevance Floor similitud / record pasa gate. RetrievalCoordinator._gate, factory.py. APPROVE CHANGE Score compuesto. test_issue188_public_retrieval_contracts.py; weak/high-salience con pesos explícitos.
working_layer_exclude_speakers Filtro en todo recall / assistant ausente. Sólo WorkingWindow.read, memory_capabilities(... exclude_speakers=...). APPROVE CHANGE Recalled records no tienen speaker schema. test_issue188_public_retrieval_contracts.py; fuente working y recalled.
scope_blend_mode Peso ancestros / ranking jerárquico. RetrievalCoordinator + ScopeBlend. APPROVE CHANGE off/blend/backfill sustituyen policy. test_issue188_public_retrieval_contracts.py; local+ancestor para cada modo.
enabled_layers Layers hydration / layers consultadas. Orchestrator inyectado retiene layers, memory_orchestrator_rows.py; evidencia test_core15_measurable_native_evidence.py::test_enabled_layers_changes_the_native_retrieval_query. APPROVE CHANGE Precedencia de construcción cambia. tests/agent/cutover/test_continuation_cutover.py; top-level y injected orchestrator.
phase1_spreading_weight Peso BFS/direct / importancia persistida post-nap. LearningPolicy.phase1_spreading_weight, capabilities/memory/phases/quick.py. APPROVE CHANGE Nap nativo no importa FrameworkConfig. test_issue188_public_retrieval_contracts.py::test_public_quick_nap_persists_phase1_spreading_weight_effect; coordinator/schedule/lease.
working_memory_recent_turns Conteo; 0 deshabilita / tamaño ventana. WorkingWindow.read, memory_retrieval_rows.py; evidencia test_core15_measurable_native_evidence.py::test_working_memory_recent_turns_changes_a_direct_agents_stage_observable. APPROVE CHANGE Cero rechazado. tests/agent/cutover/test_memory_retrieval_lane.py; contrato disabled y 0/1/N.

Los selectores abreviados test_issue188... pertenecen a tests/capabilities/memory/test_issue188_public_retrieval_contracts.py.

D. Continuidad y estado: el host es el owner nuevo

Fila Legacy / observable Evidencia Agent/Kernel Recomendación Riesgo Prueba de aceptación
dev_sqlite_checkpoint_path SQLite path / payload restart-resume. human_interaction + AgentHost, puertos checkpoint/scope, services/conversation/checkpoint.py. APPROVE CHANGE Bare path/import SQLite no soportados; at-most-once host-level. tests/platform/test_fp3_public_preservation_journeys.py::test_public_host_continues_a_durable_pause_in_a_fresh_process; aislamiento, scope, single-use.
state_class Reemplazo LangGraph / shape estado. Agent.run(state=...) -> TurnRequest.properties, agent/facade_turn.py. APPROVE CHANGE Sin conversión ni persistencia automática. tests/platform/test_issue190_migration_contracts.py::test_public_custom_turn_state_reaches_a_capability_and_stays_per_turn[run]; stream y no-reinyección recovery.
ask_user_pause_ttl_seconds Pause TTL / expiry y resume host fresco. TTLPolicy -> human_interaction -> AgentHost, capabilities/human/values.py. APPROVE CHANGE Máximo rechaza en vez de clamp. test_fp3_public_preservation_journeys.py::test_public_host_continues_a_durable_pause_in_a_fresh_process[resume-below], [resume-equal], [expired]; tests/capabilities/human/test_the_door.py::test_public_pause_refuses_an_above_maximum_lifetime_before_minting.

E. Eliminación sin consumer nativo

Fila Legacy / observable Evidencia Agent/Kernel Recomendación Riesgo Prueba de aceptación
activation_log_mode Footer activation-log / bytes prompt. Sin consumer; src/symfonic/agent/cutover/retired_settings.py. APPROVE REMOVAL Pérdida de footer de procedencia. Crear y ejecutar comparación de prompt compilado: el inventario declara MISSING: compiled-prompt comparison; registrar pérdida y mitigación.

Checklist de CORE-1

Hay exactamente estas 28 filas pendientes de aprobación: activation_log_mode, ask_user_pause_ttl_seconds, credential_patterns, dev_sqlite_checkpoint_path, domain, domain_description_max_chars, enabled_layers, extraction_template_path, fabrication_refuse_min_confidence, hms_budget_mode, hms_system_prompt_token_budget, hydration_min_relevance, jit_manifest_token_budget, manifest_cache_position, memory_extract_cadence, messages_cache_policy, metacognition_confidence_threshold, metacognition_gate, metacognition_selective_gate, metacognition_sensitive_tags, metacognition_trivial_ack_patterns, phase1_spreading_weight, read_only_tools, scope_blend_mode, scorer_on_hot_path, state_class, working_layer_exclude_speakers, y working_memory_recent_turns.

Para cada una: confirmar owner del inventario, decidir RESTORE/CHANGE/REMOVAL, ejecutar la prueba exacta, enlazar sólo nodos del outcome de esa fila y registrar la decisión. Hasta entonces, el estado es pendiente y la migración sigue bloqueada.