---
{
  "n": 27,
  "title": "Ready to commit",
  "abstract": "",
  "refs": [],
  "seen": [
    "agent",
    "system"
  ],
  "data": {
    "command": ".venv/bin/python scripts/checks/test_shape.py && lockf -k /private/tmp/aj-suite.lock .venv/bin/python -m pytest -q --timeout=600 -n auto",
    "touched": ".venv/bin/python -m pytest -q --timeout=300 {tests}",
    "then": "python3 scripts/boot_guard.py && git push --no-verify -q -u origin HEAD",
    "environment": "main",
    "buttons": [
      {
        "label": "Run",
        "type": "check",
        "action": "run",
        "n": 27,
        "again": true
      }
    ],
    "running": {},
    "last": {
      "ok": false,
      "code": 1,
      "at": 1791711714.333133,
      "took": 2127.99,
      "steps": 791,
      "output": "FAILED tests/test_it_boots.py::test_the_start_menu_follows_the_keys_typed_in_a_real_terminal_and_gives_the_terminal_back[typed3-2]\nFAILED tests/test_the_flows.py::test_a_ticket_is_started_merged_reopened_and_started_again_and_the_board_says_so_at_each_step\nFAILED src/features/auto_update/test.py::test_a_launch_repairs_a_half_done_upgrade_and_says_when_records_were_lost\nFAILED src/features/messages/test.py::test_a_row_named_by_a_bare_number_is_named_back_with_its_type\nFAILED tests/test_it_boots.py::test_the_start_menu_follows_the_keys_typed_in_a_real_terminal_and_gives_the_terminal_back[typed4-SystemExit:journal: left without starting]\nFAILED tests/test_it_boots.py::test_the_start_menu_follows_the_keys_typed_in_a_real_terminal_and_gives_the_terminal_back[typed5-KeyboardInterrupt:]\nFAILED src/features/open_viewer/test.py::test_the_viewer_reads_and_changes_its_settings_hooks_services_files_and_identity\nFAILED tests/test_the_viewer.py::test_the_viewer_answers_every_state_in_a_browser[pressEverything]\nFAILED src/features/auto_update/test.py::test_a_hook_never_waits_more_than_a_moment_for_a_server_that_is_down_and_a_few_seconds_for_one_too_busy_to_beat\nFAILED tests/test_the_flows.py::test_a_run_another_run_interrupted_cannot_be_closed_by_hand_and_is_handed_back_at_its_step\nFAILED src/features/file_feed/test.py::test_edits_in_an_agents_own_worktree_reach_its_feed_and_a_shell_command_counts_unless_it_only_reads\nFAILED tests/test_the_flows.py::test_a_refused_chained_line_names_only_the_commands_that_ran_and_the_ones_that_did_not\nFAILED tests/test_it_boots.py::test_a_record_made_by_version_2_60_0_upgrades_through_every_migration_and_the_journal_starts_on_it\nFAILED tests/test_every_action.py::test_every_listing_is_one_page_of_open_rows_inside_the_budget\nFAILED tests/test_the_viewer.py::test_the_viewer_answers_every_state_in_a_browser[recover]\nFAILED tests/test_it_boots.py::test_the_chat_mirror_replays_what_was_left_unsent_and_sends_each_unfinished_turn_once\nFAILED tests/test_it_boots.py::test_every_agent_launches_under_the_journal_and_exits_cleanly[claude]\nFAILED tests/test_the_viewer.py::test_the_viewer_answers_every_state_in_a_browser[search]\nFAILED tests/test_it_boots.py::test_an_upgrade_to_the_version_already_installed_fetches_nothing_and_keeps_the_build\nFAILED tests/test_the_viewer.py::test_the_viewer_answers_every_state_in_a_browser[secrets]\nFAILED tests/test_the_viewer.py::test_a_paired_phone_answers_every_state_in_a_browser[parity]\nFAILED tests/test_it_boots.py::test_a_build_whose_supervisor_dies_on_start_goes_back_to_the_last_good_one\nFAILED tests/test_the_viewer.py::test_the_viewers_own_code_passes_its_unit_tests\nFAILED tests/test_it_boots.py::test_every_agent_launches_under_the_journal_and_exits_cleanly[codex]\nFAILED tests/test_the_viewer.py::test_the_viewer_answers_every_state_in_a_browser[settings]\nFAILED tests/test_it_boots.py::test_a_running_server_restarts_on_a_new_build_and_exits_when_asked_to_stop\nFAILED tests/test_the_viewer.py::test_a_paired_phone_answers_every_state_in_a_browser[settings]\nFAILED tests/test_every_action.py::test_a_row_of_every_type_written_behind_the_stores_back_shows_up_in_lists_fresh_stale_or_in_bulk\nFAILED tests/test_the_viewer.py::test_the_viewer_answers_every_state_in_a_browser[triggers]\nFAILED tests/test_the_viewer.py::test_the_viewer_answers_every_state_in_a_browser[waiting]\nERROR src/features/connection/test.py::test_a_hosted_world_runs_a_server_and_two_local_copies_as_real_processes_that_connect_and_sync\nERROR tests/test_the_viewer.py::test_the_viewer_answers_every_state_in_a_browser[agentcells]\nERROR tests/test_the_viewer.py::test_the_viewer_answers_every_state_in_a_browser[agentscope]\nERROR tests/test_the_viewer.py::test_the_viewer_answers_every_state_in_a_browser[board]\nERROR tests/test_the_viewer.py::test_the_viewer_answers_every_state_in_a_browser[boot]\nERROR tests/test_the_viewer.py::test_the_viewer_answers_every_state_in_a_browser[chat]\nERROR tests/test_the_viewer.py::test_the_viewer_answers_every_state_in_a_browser[connection]\nERROR tests/test_the_viewer.py::test_the_viewer_answers_every_state_in_a_browser[documents]\nERROR tests/test_the_viewer.py::test_the_viewer_answers_every_state_in_a_browser[files]\n55 failed, 682 passed, 1 xfailed, 1 warning, 9 errors in 2127.01s (0:35:27)",
      "report": null
    },
    "runs": [
      {
        "ok": false,
        "code": 1,
        "at": 1791711714.333133,
        "took": 2127.99
      },
      {
        "ok": false,
        "code": 1,
        "at": 1791701815.433923,
        "took": 698.08
      },
      {
        "ok": false,
        "code": 1,
        "at": 1791700862.089977,
        "took": 401.53
      },
      {
        "ok": false,
        "code": 1,
        "at": 1791699808.644755,
        "took": 378.74
      },
      {
        "ok": false,
        "code": 1,
        "at": 1791698200.18877,
        "took": 306.68
      },
      {
        "ok": false,
        "code": 1,
        "at": 1791696666.7400808,
        "took": 903.64
      },
      {
        "ok": false,
        "code": 1,
        "at": 1791689608.8027542,
        "took": 456.51
      },
      {
        "ok": false,
        "code": 1,
        "at": 1791688869.969016,
        "took": 674.43
      },
      {
        "ok": false,
        "code": 1,
        "at": 1791687918.2063098,
        "took": 866.82
      },
      {
        "ok": false,
        "code": 1,
        "at": 1791687356.8393102,
        "took": 515.27
      },
      {
        "ok": false,
        "code": 1,
        "at": 1791686645.9865239,
        "took": 509.86
      },
      {
        "ok": false,
        "code": 1,
        "at": 1791685378.154537,
        "took": 1037.75
      },
      {
        "ok": false,
        "code": 1,
        "at": 1791683817.3644521,
        "took": 1335.46
      },
      {
        "ok": false,
        "code": -1,
        "at": 1791683038.899016,
        "took": 600.15
      },
      {
        "ok": true,
        "code": 0,
        "at": 1791312183.0144231,
        "took": 390.03
      },
      {
        "ok": true,
        "code": 0,
        "at": 1791310913.822628,
        "took": 148.93
      },
      {
        "ok": true,
        "code": 0,
        "at": 1791308844.136493,
        "took": 120.51
      },
      {
        "ok": true,
        "code": 0,
        "at": 1791308623.4133399,
        "took": 138.21
      },
      {
        "ok": true,
        "code": 0,
        "at": 1791307271.273983,
        "took": 520.19
      },
      {
        "ok": true,
        "code": 0,
        "at": 1791305955.24168,
        "took": 133.3
      }
    ],
    "files": {},
    "timeout": 2400
  },
  "created": 1790806343.579882,
  "updated": 1791713842.325164,
  "deleted": 0.0,
  "completed": 0.0,
  "outcome": "",
  "type": "check"
}
---
The gate for a commit on this project: the whole suite in parallel and the judge on the changed files (the read_json line is excluded until to-do 2164 lands). touched runs the tests beside what changed; then pushes to main and installs from a clean worktree of the new commit.
