{% extends "base.html" %} {% block title %}Review{% endblock %} {% block topbar_main %}

Review

Proposals waiting on a decision, and what people said {% endblock %} {% block content %}
{% if rows %}
PlanProjectWaitingState
{% for row in rows %}
{{ row.plan_file.name }}.md {{ row.project.name if row.project else '—' }} {{ row.pending | length }} {# Two different pills because they are two different things. A teammate's comment was signed by a device in this mesh; a note from outside could not be. Counting them together would erase the one distinction this page exists to keep. #} {% if row.comments %} {{ row.comments }} note{{ '' if row.comments == 1 else 's' }} {% endif %} {% if row.outside %} +{{ row.outside | length }} {% endif %} {% if row.conflicted %}contested {% elif row.pending %}open {% elif row.outside %}outside review {% elif row.comments %}commented {% else %}settled{% endif %} {# Whether a decision here would bind anybody. Shown next to the state rather than instead of it, because the two are different facts: what the review says, and whether it is an authorization. #} {% if not row.enforced %} advisory {% endif %}
{% endfor %}
{% else %}

Nothing is waiting

No plan here has an open proposal. This page fills in when somebody proposes a revision, whether they are on this machine or another one.

{% endif %}

Deciding from here

Reviewing is a signed record, not a form post, so it happens at the command line where this machine's key lives. A browser session cannot sign anything — that separation is what stops a page on the internet accepting a plan on your behalf.

flanner review status <plan>

Then flanner review decide <plan> --accept or --reject. The decision syncs to your peers like any other version.

n notes are comments from the mesh, each signed by a teammate's device. A +n counts notes returned in a review packet by somebody outside the team; those are unsigned, so they are recorded as received rather than authored. Neither kind moves a plan's accepted baseline — pointing at a paragraph is not the same as deciding about it.
advisory marks a project whose roles are local to this machine. Review still runs and every decision is still signed, but the role map is editable by whoever holds this device, so accepting a plan records a decision rather than authorizing one. Roles become enforced once the project joins a workspace and this device holds a valid entitlement.
Review decisions never reach the control plane. It holds accounts, devices and access; what anyone thinks of a plan stays on the machines that hold the plan. How syncing works.
{% endblock %}