{% extends "curb_base.html" %} {# This machine › Tests: each block and its result, and the fake credentials a test plants. #} {% block part %} {% if machine_held.value is none %} {% if machine_held.error %}{{ k.failed(machine_held.error) }}{% else %}{{ k.checking("Finding the blocks a test can try…") }}{% endif %} {% else %}
{% set src = "Curb plants fake credentials, then asks each agent to read them. " ~ (view.cost | join(" ")) %} {% call k.head("Check that each block really stops the agent.", src) %} {% if view.runnable and not job.running %}{{ k.act("Run tests", "tests", "btn-primary") }}{% endif %} {% endcall %} {% if job.running %}

Testing: {{ job.done }} of {{ job.total or view.runnable }} done. {{ job.label }}

Each test starts the agent itself, so one can take a few minutes. You can leave this page.

{% elif job.state == "failed" %} {% endif %} {% if view.rows %}
Blocks {{ k.tally() }} {% if view.tested %}{{ view.proved }} of {{ view.runnable }} proved{% else %}none tested yet{% endif %} {% call k.tools("Search blocks") %} {% endcall %}
BlockResultLast run
{% for row in table.rows %}
{{ row.name }}{{ row.agent }} {{ row.result }}{{ row.why }} Last run: {{ ago(row.at) | said if row.at else "Never" }} {% if row.tries %}
What the agent tried
    {% for line in row.tries %}
  • {{ line }}
  • {% endfor %}
{% endif %}
{% endfor %} {{ k.foot("No block matches that search.") }}
{% else %} {% call empty.state("clear", "Nothing to test yet") %}

A test proves that a block holds, and no setting blocks anything yet. Apply the fixes first, then come back.

Open fixes {% endcall %} {% endif %} {% if view.decoys %}
Fake credentials {{ view.decoys }}

A test needs something safe to steal. These look like real credentials and work nowhere. They are never placed inside a git repository, and they remove themselves {% if view.decoys_until %}on {{ day(view.decoys_until) }}{% else %}after 30 days{% endif %}.

Show where they are {% if shown %}
    {% for place in view.decoy_places %}
  • {{ place }}
  • {% endfor %}
{% else %}

Where a fake credential sits says where real ones sit. {{ k.ask_names() }} to see them.

{% endif %}
{% endif %} {% call k.explain("What the results mean", "Proved means the agent itself tried, and failed.") %}
Block
A setting that should stop an agent.
Proved
The agent tried every way Curb knows, and each one was stopped.
Held in a copy
The block is a project rule. It held in a scratch copy of the project.
Not proved
At least one way got through. The row says which.
Unclear
The agent declined, failed, or stopped to ask. Nothing was learned.
Out of date
The settings changed after the test, so it proves nothing now.

A test runs each agent in a scratch folder, never in your projects. The test's own transcript is deleted afterwards.

{{ k.cmd("flanner curb test") }} {% endcall %}
{% endif %} {% endblock %} {% block reviews %} {% if machine_held.value is not none %} {% call k.review_box("tests", "Run " ~ view.runnable ~ (" test?" if view.runnable == 1 else " tests?"), "/curb/machine/tests/run") %}

Curb plants a fake credential beside each file a block protects. Then it starts each agent and asks it to read the fake.

Nothing in your agents' settings changes.

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