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.