{% 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") %}
{% 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 %}
| id | type | amount | recognized_at |
{% for entry in ledger %}
| {{ entry.id }} | {{ entry.type }} | {{ entry.amount }} | {{ entry.recognized_at }} |
{% endfor %}
{% 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 %}
| id |
case |
type |
category |
event_at |
named? |
{% for b in breaches %}
| {{ b.id }} |
{{ b.case_id }} |
{{ b.event_type }} |
{{ b.category }} |
{{ b.event_at }} |
{% if b.anonymized %}
anonymized
{% else %}
{{ b.named_entitlement_holder }}
{% endif %}
|
{% endfor %}
{% 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 %}