symfonic.agent.cutover.prompt_assembly_policy¶
prompt_assembly_policy ¶
C1-G: the eight prompt-layout spellings replaced on the 11.0 line (TA8.38).
TA8.25's subgroup C1-G holds ten rows and recommends REPLACE: "These
controls describe legacy prompt layout/cache mechanics. Preserve supported
budget and freshness outcomes under a prompting policy, but remove the old
mechanical keys." Eight of the ten are replaced here. Two are not, for
different reasons, and both arguments live in
:mod:~symfonic.agent.cutover.prompting_surfaces beside the rows they belong
to:
domain_description_max_charshas a live kernel consumer, which is the one fact that makes a REPLACE wrong. It is admitted instead.procedural_render_preflight_in_l1is not a layout knob at all: it switches on a synthesiser that reads the procedural memory layer and generates the PRE-FLIGHT text. Nothing in the prompting contract generates content, so a REPLACE would hand an adopter the placement and none of the capability. It stays refused to legacy, where it is still served.
The mechanism is TA8.26's, deliberately. These eight are RetiredSetting
rows folded into :data:~symfonic.agent.cutover.retired_settings.RETIRED_SETTINGS
under one group, so they refuse by name before dispatch on run, stream
and stream_typed through the guard the engine already calls. A second
spelling of "refuse by name" would be a second chance to disagree about the
wording, the ancestry and the line -- the reason pause_surfaces,
force_lever and governance_surfaces all fold into the same table.
What was actually there before. Every one of the eight falls to legacy
today: the envelope is default-deny and no allowlist entry names them. That is
the absence of a decision, and it is what the inventory recorded as
refused-to-legacy with disposition MISSING CONTRACT.
Why REPLACE rather than MIGRATE. Not one of the eight has a reader on the
kernel route. SymfonicAgent._cutover_delegate passes instructions=None
and its own docstring says why; the kernel's system prompt is compiled from the
bundle's single HmsSystemSource contribution by
:class:~symfonic.capabilities.prompting.capability.PromptingCapability. The
readers that exist -- _build_hms_prompt_for_strategy,
_build_jit_prompt_for_strategy, _maybe_apply_stratigraphic,
_enforce_hms_budget, _maybe_build_preflight_contribs, and the
MessagesRegionCacheStrategy only core/nodes/react.py looks up -- are all
on the legacy body. configuration/compat/fragments.py::_prompt reads them
too, and reads them for the diagnostics probe, not for a turn.
The capability survives; the spelling does not. Each row's instead
names the live surface an adopter moves to and the break they see when they
move. That break is real and it is stated per row rather than once, because
"budget" and "cache TTL" mean different things on a compiler that derives
regions from a volatility ladder than they did on a builder that spliced
strings at fixed positions.
The composition move is the break they share. All eight were spelled on
FrameworkConfig; their replacements are composed --
fold_retrieval_bundle(context_window=..., prompt_share=...) and
PromptContribution(...) -- which is the same shape of migration TA8.42's
pause pair published: a value change becomes a composition change. It is
stated once here and referenced rather than repeated eight times.