{% extends "base.html" %} {% from "macros.html" import help_bubble, render_next_steps, lifecycle_checklist %} {% block title %}{{ manifest.phase.id }} — Target Revenue Control Plane{% endblock %} {% block content %} {{ manifest.phase.milestone_release.name }} {{ help_bubble( "This page is the operator cockpit for one Phase: status, ledger, remission, " "conversion attestation, and breach records." ) }}

{{ manifest.phase.id }}

{{ lifecycle_checklist(checklist) }} {{ render_next_steps(next_steps, title='What to do next on this Phase') }}
Ledger reference (internal) {{ help_bubble( "The raw ledger URI stored on the Manifest. Live entries are listed below; " "this drill-down is for federation-ready reference, not day-to-day use." ) }}

Raw reference: {{ manifest.phase.ledger }} {% if manifest.phase.ledger.startswith('/phases/') %} · view live JSON {% endif %}

Status {{ help_bubble( "Outstanding Target = max(0, Initial Target − Development Credit − Remission Credit). " "When it reaches zero, the Phase converts to the Future License automatically." ) }}

Initial Target {{ help_bubble("Immutable commercial ceiling declared at Phase registration.") }} {{ manifest.phase.initial_target.amount }} {{ manifest.phase.initial_target.currency }}
Cumulative Development Credit {{ help_bubble("Settled commercial payments allocated to this Phase (not revenue accounting).") }} {{ metrics.facts.cumulative_development_credit }}
Cumulative Remission Credit {{ help_bubble("Time-based reduction under the degeneration policy — never represented as captured revenue.") }} {{ metrics.facts.cumulative_remission_credit }}
Outstanding Target {{ metrics.facts.outstanding_target }}
Target satisfaction{{ metrics.calculations.target_satisfaction_percentage }}%
Converted{{ metrics.facts.is_converted }}
Degeneration policy {{ manifest.phase.degeneration_policy }} · view spec
Longstop {{ help_bubble("Full-remission instant: by this time Remission Credit alone can exhaust the Initial Target.") }} {{ metrics.facts.longstop_at or "—" }}
Activated (t0) {{ help_bubble("Phase activation time for remission math — Trust Service registration timestamp.") }} {{ metrics.facts.activated_at or "—" }}

Remission forecast forecast {{ help_bubble( "Forecasts are projections, not ledger facts. Applying remission writes a real " "remission-credit entry only when the cumulative formula is ahead of what is already recorded." ) }}

If applied now {% if metrics.forecasts.remission_if_applied_now is not none %} {{ metrics.forecasts.remission_if_applied_now }} {{ metrics.facts.initial_target_currency }} {% else %} — {% endif %}
Next scheduled (monthly UTC / longstop) {{ metrics.forecasts.next_scheduled_remission_at or "—" }}
Amount at next schedule {% if metrics.forecasts.next_scheduled_remission_amount is not none %} {{ metrics.forecasts.next_scheduled_remission_amount }} {{ metrics.facts.initial_target_currency }} {% else %} — {% endif %}
{% if session_rights in ("operator", "admin") %}

Writes a remission-credit delta under system:policy-engine (idempotent — no double-remit if already current).

{% endif %}

Ledger ({{ ledger | length }} entries) {{ help_bubble( "Append-only. Corrections are new compensating entries (credit-reversal / " "remission-correction), never edits of prior rows." ) }}

{% if ledger %} {% for entry in ledger %} {% endfor %}
idtypeamountrecognized_at
{{ entry.id }}{{ entry.type }}{{ entry.amount }}{{ entry.recognized_at }}
{% else %} No ledger entries yet. {% endif %} {% if session_rights in ("contributor", "operator", "admin") %}

{% if session_rights == "contributor" %}Propose a Development Credit entry{% else %}Add a Development Credit entry{% endif %} {{ help_bubble( "Use settlement time (not invoice time). Extension id must match a registered " "monetization extension. Evidence can use the confidential: scheme for private refs." ) }}

{% endif %}

Conversion Attestation {{ help_bubble( "Signed public evidence that conversion occurred. Conversion itself is true " "the moment the fold hits zero — the attestation only observes and publishes it." ) }}

{% if attestation %}
Phase{{ attestation.phase }}
Milestone release{{ attestation.milestone_release }}
Converted at{{ attestation.conversion_timestamp }}
Future License{{ attestation.future_license }}
Final development credit{{ attestation.final_development_credit }}
Final remission credit{{ attestation.final_remission_credit }}
Outstanding at conversion{{ attestation.final_outstanding_target }}
Ledger checkpoint{{ attestation.ledger_checkpoint }}
Signature{{ attestation.signature }}
{% elif metrics.facts.is_converted %}

Phase is converted; attestation will publish on next observation.

{% else %} Not converted — no attestation yet. {% endif %}

Breach / Compliance Records ({{ breaches | length }}) {{ help_bubble( "Licensor determinations only — anonymized by default. Named disclosure requires " "an explicit CUA authorization assertion (License §7.4)." ) }}

{% if breaches %} {% for b in breaches %} {% endfor %}
id case type category event_at named?
{{ b.id }} {{ b.case_id }} {{ b.event_type }} {{ b.category }} {{ b.event_at }} {% if b.anonymized %} anonymized {% else %} {{ b.named_entitlement_holder }} {% endif %}
{% else %} No breach/compliance records published for this Phase. {% endif %} {% if session_rights in ("operator", "admin") %}

Publish a breach/compliance event

Anonymized by default (Phase + category only). Named disclosure requires an affirmative CUA authorization check.

{% endif %} {% endblock %}