cadrumo.entrypoints.tui.modelo.view.provenance module

The modelo.workspace.provenance read destination.

Flat bounded attribution: one row per contributing source the producer recorded, showing which subject it fed when it named one.

NO CAUSAL EXPANSION. ModeloWorkspaceProvenanceRecordV1 is (subject | None, calculation_source) and carries no depth, no parent link and no cycle marker. A screen that arranged these rows into a tree, or labelled any of them by depth, would author a causal claim no producer made. The rows are an attribution list, and this destination presents them as one.

An unattributed row is shown, never dropped. subject is None when the underlying CalculationSourceRef names no casilla, which is the common case today; the producer deliberately emits exactly one record for such a ref rather than zero, so an audit reader sees every contributing source. Hiding those rows here would undo that at the last step.

Paging is the NORMAL case, not the exception. One source reference fans out to one record per casilla it names, so this facet can overflow without the revision growing at all – and row count therefore tells an operator nothing about completeness. The boundedness notice is the only thing that does.

Each row names the subject and the source it came from; the resolver that read the source is a raw identifier and sits in a collapsed technical-details group, row for row.

The per-value provenance nested on materialization records is NOT read here, and not because this destination prefers the facet: that nested field is never populated by any producer, so a screen drawing on it would render permanently empty lists. The facet is the only populated provenance surface.

class ModeloWorkspaceProvenanceScreen(session, *, id=None)[source]

Bases: TypedAppAccess, AccountChromeScreen

Flat attribution rows for the current session, or an explicit not-applicable.

Parameters:
BINDINGS: ClassVar

A list of key bindings.

compose()[source]

Called by Textual to create child widgets.

This method is called when a widget is mounted or by setting recompose=True when calling [refresh()][textual.widget.Widget.refresh].

Note that you don’t typically need to explicitly call this method.

Return type:

Iterable[Widget]

Example

def compose(self) -> ComposeResult:
    yield Header()
    yield Label("Press the button below:")
    yield Button()
    yield Footer()
on_mount()[source]

Refuse when the admission carries no provenance, otherwise render the rows.

Return type:

None

action_quit_provenance()[source]

Leave the destination without returning a value; this screen decides nothing.

Return type:

None

action_toggle_appearance()[source]

Switch between the two shipped appearances.

Return type:

None

can_focus: bool

Widget may receive focus.

can_focus_children: bool

Widget’s children may receive focus.