---
{
  "n": 32,
  "title": "Test coverage stays at or above its floor",
  "abstract": "",
  "refs": [],
  "seen": [
    "agent",
    "system",
    "user"
  ],
  "data": {
    "command": "rm -f .coverage .coverage.* && env -u JOURNAL_ENV lockf -k /private/tmp/aj-suite.lock .venv/bin/python -m pytest -q --timeout=600 -n 4 --cov --cov-config=.coveragerc --cov-report= && .venv/bin/python -m coverage report --rcfile=.coveragerc",
    "every": 1440,
    "environment": "main",
    "buttons": [
      {
        "label": "Run",
        "type": "check",
        "action": "run",
        "n": 32,
        "again": true
      }
    ],
    "last": {
      "ok": false,
      "code": 1,
      "at": 1791696666.977775,
      "took": 1453.29,
      "steps": 750,
      "output": "script = 'browser/phoneapp/agent.mjs'\nargs = ('http://localhost:60751/p/#EJl5IdjzHkfRU4YltNqhhPMmV5cGFD1n', 'http://127.0.0.1:60752/#/t')\nenv = {}\n\n    def play(self, script: str, *args: str, **env: str) -> None:\n        \"\"\"Runs a scenario script in this browser and fails the test with every scenario that failed.\"\"\"\n        run = subprocess.run([\"node\", script, *args], cwd=WEB, env={**os.environ, **env, \"JOURNAL_BROWSER\": self.endpoint},\n                             capture_output=True, text=True, timeout=SCENARIOS_WAIT)\n        assert run.returncode == 0, run.stderr[-2000:]\n        failed = run.stdout.strip().splitlines()[-1]\n>       assert failed == \"{}\", f\"these scenarios of {script} failed: {failed}\"\nE       AssertionError: these scenarios of browser/phoneapp/agent.mjs failed: {\"a command reaches the computer only after Face ID unlocks the phone\":\"locator.click: Timeout 8000ms exceeded. Call log: \\u001b[2m  - waiting for locator('.chat-notice').filter({ hasText: 'Set up Face ID for phone' }).getByRole('button', { name: 'Allow', exact: true })\\u001b[22m \\u001b[2m    - locator resolved to <button type=\\\"button\\\" aria-busy=\\\"false\\\" data-v-30ec20fe=\\\"\\\" data-v-dd67bd65=\\\"\\\" class=\\\"btn ghost small\\\">\u2026</button>\\u001b[22m \\u001b[2m  - attempting click action\\u001b[22m \\u001b[2m    2 \u00d7 waiting for element to be visible, enabled and stable\\u001b[22m \\u001b[2m      - element is visible, enabled and stable\\u001b[22m \\u001b[2m      - scrolling into view if needed\\u001b[22m \\u001b[2m      - done scrolling\\u001b[22m \\u001b[2m      - <img alt=\\\"\\\" data-v-4c851533=\\\"\\\" class=\\\"new-feature-art\\\" src=\\\"/announcements/squire.webp\\\"/> from <div data-v-15bb89f2=\\\"\\\" data-v-4c851533=\\\"\\\" class=\\\"dialog sheet\\\">\u2026</div> subtree intercepts pointer events\\u001b[22m \\u001b[2m    - retrying click action\\u001b[22m \\u001b[2m    - waiting 20ms\\u001b[22m (the page at that moment: /var/folders/jw/5_sm4hg92x70kql0hrg4w54c0000gn/T/scenario-1791697857993.png)\"}\nE       assert '{\"a command ...857993.png)\"}' == '{}'\nE         \nE         - {}\nE         + {\"a command reaches the computer only after Face ID unlocks the phone\":\"locator.click: Timeout 8000ms exceeded. Call log: \\u001b[2m  - waiting for locator('.chat-notice').filter({ hasText: 'Set up Face ID for phone' }).getByRole('button', { name: 'Allow', exact: true })\\u001b[22m \\u001b[2m    - locator resolved to <button type=\\\"button\\\" aria-busy=\\\"false\\\" data-v-30ec20fe=\\\"\\\" data-v-dd67bd65=\\\"\\\" class=\\\"btn ghost small\\\">\u2026</button>\\u001b[22m \\u001b[2m  - attempting click action\\u001b[22m \\u001b[2m    2 \u00d7 waiting for element to be visible, enabled and stable\\u001b[22m \\u001b[2m      - el...\nE         \nE         ...Full output truncated (1 line hidden), use '-vv' to show\n\ntests/conftest.py:224: AssertionError\n=============================== warnings summary ===============================\ntests/test_it_boots.py::test_the_archive_is_built_and_tried_before_the_journal_is_pointed_at_it\n  /private/var/folders/jw/5_sm4hg92x70kql0hrg4w54c0000gn/T/pytest-of-jessegall/pytest-319/popen-gw0/test_the_archive_is_built_and_0/.journal/journal.pyz/features/ask_questions/test.py:127: SyntaxWarning: assertion is always true, perhaps remove parentheses?\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n================================ tests coverage ================================\n_______________ coverage: platform darwin, python 3.14.7-final-0 _______________\n\nFAIL Required test coverage of 98.9% not reached. Total coverage: 72.64%\n=========================== short test summary info ============================\nFAILED src/features/machines/test.py::test_two_machines_leasing_from_one_record_never_hand_out_the_same_number\nFAILED src/features/machines/test.py::test_an_existing_record_upgrades_with_its_numbers_continuing\nFAILED src/features/machines/test.py::test_a_copy_that_connects_is_told_how_its_release_and_its_record_stand_against_the_servers\nFAILED src/features/connection/test.py::test_a_hosted_world_runs_a_server_and_two_local_copies_as_real_processes_that_connect_and_sync\nFAILED src/features/connection/test.py::test_a_sync_that_meets_a_server_down_an_epoch_change_or_an_interrupted_push_keeps_what_waits_and_applies_nothing_twice\nFAILED src/features/connection/test.py::test_the_sync_routes_are_safe_to_ask_twice_name_who_holds_an_environment_and_a_lost_answer_no_one_can_settle_is_refused\nFAILED src/features/dev_faults/test.py::test_a_setting_is_read_once_and_a_change_from_another_process_is_seen_after_its_event\nFAILED tests/test_the_viewer.py::test_a_paired_phone_answers_every_state_in_a_browser[agent]\n8 failed, 736 passed, 1 xfailed, 1 warning in 549.18s (0:09:09)\n<sys>:0: ResourceWarning: unclosed database in <sqlite3.Connection object at 0x10568c9a0>",
      "report": null
    },
    "running": {},
    "runs": [
      {
        "ok": false,
        "code": 1,
        "at": 1791696666.977775,
        "took": 1453.29
      },
      {
        "ok": false,
        "code": 1,
        "at": 1791652503.278893,
        "took": 1343.63
      },
      {
        "ok": false,
        "code": 1,
        "at": 1791557158.472063,
        "took": 963.07
      },
      {
        "ok": false,
        "code": -1,
        "at": 1791556536.583494,
        "took": 600.15
      },
      {
        "ok": false,
        "code": -1,
        "at": 1791470135.028113,
        "took": 600.06
      },
      {
        "ok": false,
        "code": 1,
        "at": 1791383734.334495,
        "took": 8510.8
      }
    ],
    "files": {},
    "timeout": 2400
  },
  "created": 1791296735.7778492,
  "updated": 1791698120.273932,
  "deleted": 0.0,
  "completed": 0.0,
  "outcome": "",
  "type": "check"
}
---

