symfonic.agent.cutover.prompting_surfaces¶
prompting_surfaces ¶
TA8.38's twenty-five rows, and what each one does on all three entry points.
The lane's ledger. C1-F and C1-O (fourteen prompt_blocks rows), C1-G (ten
prompt assembly rows) and C1-Q (the domain container) share a branch because
they share files; they do not share evidence, so every row is a row here and
the tests drive each one separately.
Two things live here and nowhere else. :data:PROMPT_SOURCE_LIFTS and
:data:PROMPT_BEARING_DOMAIN_FIELDS are the admission this lane actually made,
and both are conditional: they widen the envelope only for an invocation whose
authorised bundle carries a system prompt source, the same condition
enable_hms_prompt itself lifts on. Unconditional entries on
ALLOWED_FRAMEWORK_FIELDS would have claimed the migrated path honours these
values on every turn, and on a turn with no prompt source it honours none of
them -- the silent drop this lane exists to refuse. :data:PROMPTING_SURFACES
is all twenty-five rows, by name.
The row shape -- and the rule that a divergence from the triage must carry an
argument -- is :class:~symfonic.agent.cutover.prompting_rows.PromptingSurface.
The eight replaced rows publish their contract in
:mod:~symfonic.agent.cutover.prompt_assembly_policy, the fourteen block rows
theirs in :mod:~symfonic.agent.cutover.prompt_block_contract.
PromptingSurface
dataclass
¶
PromptingSurface(path: str, subgroup: str, owner: str, recorded: str, applied: str, served_by: tuple[str, ...], refused_by: tuple[str, ...], inert_on: tuple[str, ...], consumer: str, observable: str, condition: str | None = None, override_argument: str | None = None)
One TA8.38 row: what the triage recommended, and what this lane did.
served_by / refused_by / inert_on partition
:data:~symfonic.agent.cutover.lifecycle_contract.PUBLIC_ENTRY_POINTS
exactly, for the reason
:class:~symfonic.agent.cutover.admission_surfaces.AdmissionSurface gives:
an unmeasured third entry point is the gap that made two thirds of this
programme's earlier evidence unusable, and a row with a hole in its surface
would reintroduce it as a data structure.
recorded and applied are separate fields, and that is the whole
point of the type. Every row must carry the disposition this lane actually
applied; a row whose applied disposition differs from the recorded
recommendation must carry an argument as well. Silence is the one state that
cannot be expressed.
overridden
property
¶
True when this lane did not apply the recorded recommendation.
NORMALISED_PER_ROW and REPLACE name a decision; the inventory
vocabulary names an outcome, so the two are compared through the one
pairing that means "applied as written" for each.
prompting_rows_for_subgroup ¶
Every row of one TA8.25 subgroup, in declaration order.
Parity is asserted per field and never aggregated across the lane, so the tests read the lane one subgroup at a time rather than iterating the whole mapping and reporting a single verdict.