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

Proposals

Skills waiting on you {% endblock %} {% block topbar_actions %} Back to skills {% endblock %} {% block content %}
{% if said %}
{{ said }}
{% endif %} {% if no_project %}

Not a flanner project

Learning is scoped to a repository, so this page needs one. Evidence from one repository proposing a skill in another is exactly the leak the scoping exists to prevent.

{% else %}

How a skill gets here

Nothing is harvested. Watching skill use sees names and times, not what you were working on, and nothing reads your conversation history. A proposal exists because somebody handed over the work it came from.

Approving covers the exact draft you read. Editing it afterwards sends it back for another look rather than shipping the edit under the old approval.

{% if clusters %}
Repeated work {{ clusters | selectattr('eligible') | list | length }} ready
{% for group in clusters %}
{{ group.topic }} {% if group.eligible %}ready to propose {% else %}not yet{% endif %} {{ group.why }}
{% endfor %}
{% endif %}
Waiting on a decision {{ rows | length }}
{% if rows %}
SkillActionStateInstallable
{% for row in rows %}
{{ row.skill }}{{ row.rationale }} {{ row.action }} {% if row.state == 'approved' %}approved {% elif row.state == 'rejected' %}rejected {% else %}{{ row.state }}{% endif %} {% if row.installable %}yes{% else %}{{ row.why }}{% endif %} Review
{% endfor %} {% else %}

Nothing proposed. flanner skills evidence submit hands over a piece of work, and flanner skills propose drafts a skill from it.

{% endif %}
{% if open %}
{{ open.skill }} {{ open.action }} ยท {{ open.state }}

{{ open.draft_hash }}

{% if open.rationale %}

{{ open.rationale }}

{% endif %}

Came from

{% if open.evidence %} {% else %}

No evidence is readable. It may have expired.

{% endif %} {% if open.evidence_expired %}

{{ open.evidence_expired }} piece(s) have since expired.

{% endif %}

The draft

Saving sends it back for another look; the approval covers the text as it was read.
{% if open.installable %}Approved and unchanged since. {% else %}{{ open.why }}{% endif %}
{% if open.decisions %}

Decided

{% endif %} {% for note in open.notes %}{% if note %}

{{ note }}

{% endif %}{% endfor %}
{% endif %}
Comparisons {{ suites | length }} suite(s)
{% if suites %}
{% if open %}{% endif %}
{% endif %} {% if matrix and matrix.cells %}
CaseProfileArmResultTrials
{% for cell in matrix.cells %}
{{ cell.case }} {{ cell.profile }} {{ cell.arm }} {% if cell.result == 'passed' %}passed {% elif cell.result == 'failed' %}failed {% elif cell.result == 'not run' %}not run {% else %}{{ cell.result }}{% endif %} {{ cell.trials }}
{% endfor %}
{% for arm, stats in matrix.summary.items() %}

{{ arm }}: {{ stats.passed }}/{{ stats.trials }} passed ({{ stats.reads_as }}), {{ stats.not_run }} cell(s) not run.

{% endfor %} {% for limit in matrix.limits %}

{{ limit }}

{% endfor %} {% for note in matrix.notes %}

{{ note }}

{% endfor %}
{% else %}

Flanner records comparisons; it does not run them. Nothing here calls a model provider, so results are entered by whatever actually ran them โ€” flanner skills eval record.

{% endif %}
{% endif %}
{% endblock %}