|
|
@@ -2482,6 +2482,30 @@ def main():
|
|
|
and page.index("status-head") < page.index("<h3>Description</h3>")
|
|
|
and page.index("status-head") < page.index("<h3>Plan</h3>"),
|
|
|
"the status block sits at the very top of the task page")
|
|
|
+ # The agent's progress feed renders DIRECTLY below the status
|
|
|
+ # head (above the description cards), newest line first.
|
|
|
+ check(page.index("status-head") < page.index("<h3>Progress</h3>")
|
|
|
+ < page.index("<h3>Description</h3>"),
|
|
|
+ "the progress feed sits directly below the status head")
|
|
|
+ conn = db()
|
|
|
+ conn.execute("insert into tasks (project_id, title, status, priority,"
|
|
|
+ " created_at) values (1, 'Progress layout task', 'working', 5,"
|
|
|
+ " strftime('%s','now','-120 seconds'))")
|
|
|
+ layout_task = conn.execute("select max(id) from tasks").fetchone()[0]
|
|
|
+ # backdated so the dashboard-timeline fixtures below stay the
|
|
|
+ # newest events
|
|
|
+ conn.execute("insert into task_progress (task_id, summary, created_at)"
|
|
|
+ " values (?, 'first update', strftime('%s','now','-90 seconds'))",
|
|
|
+ (layout_task,))
|
|
|
+ conn.execute("insert into task_progress (task_id, summary, created_at)"
|
|
|
+ " values (?, 'second update', strftime('%s','now','-89 seconds'))",
|
|
|
+ (layout_task,))
|
|
|
+ conn.commit()
|
|
|
+ conn.close()
|
|
|
+ status, history_page = http("GET", "/tasks/%d" % layout_task, timeout=15)
|
|
|
+ check(status == 200
|
|
|
+ and history_page.index("progress-latest") < history_page.index("progress-history"),
|
|
|
+ "the progress timeline renders newest-first (latest above the history)")
|
|
|
|
|
|
print("== phase 3: dashboard — pinned blocks + activity timeline ==")
|
|
|
# Pinned OPEN blocking items as link-through cards, newest
|