@prefix sioc: <http://rdfs.org/sioc/ns#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix content: <http://purl.org/rss/1.0/modules/content/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

<https://lhero.org/portfolio/lh-tasks/>
  a sioc:Post ;
  dc:title "Staff controls in the UI" ;
  dcterms:identifier 153086 ;
  dc:modified "2026-11-01T16:32:08Z"^^xsd:dateTime ;
  dc:created "2026-11-01T16:32:08Z"^^xsd:dateTime ;
  sioc:link <https://lhero.org/portfolio/lh-tasks/staff-controls-in-the-ui/> ;
  sioc:has_creator <https://lhero.org/author/1/#account> ;
  sioc:has_container <https://lhero.org/#posts> ;
  content:encoded "<ul class=\"lh_portfolio-meta\"><li><strong>Part of:</strong> <a href=\"https://lhero.org/portfolio/lh-tasks/\">LH Tasks</a></li></ul><p class=\"wp-block-paragraph\">Since 1.29.0 (#153082) everything the <code>edit-task</code> ability does to a task&#8217;s workflow can be done in the UI too: MCP abilities are never the only route to an action. Both routes below go through <code>LH_Tasks_task_actions_class::edit_task()</code>, so the change is logged as an <code>admin_override</code> entry and fires the same actions as the ability. Both need the task capability (staff).</p><h3 class=\"wp-block-heading\">Block editor</h3><p class=\"wp-block-paragraph\">The Task queue panel has a <strong>Change status</strong> control with every workflow status, a <strong>Release claim</strong> button while the task is claimed, and a <strong>Reset retries</strong> button once retries have been used, each with a way to undo before saving. Releasing the claim on a Claimed or In Progress task also sets it back to New. Changes save with Update, logged with the note &#8220;Changed in the block editor.&#8221;</p><p class=\"wp-block-paragraph\">They go through their own REST field, <code>lh_tasks_workflow</code> (<code>status</code>, <code>claimed_by</code>, <code>retry_count</code>; edit context, task capability), not <code>lh_tasks</code>. The block editor only sends fields that were edited, so a save that changes only the due date never carries a stale status back over a claim an agent made meanwhile. <code>claimed_by</code> and <code>retry_count</code> only ever release or reset: sending 0 clears them, and any other value changes nothing. Unknown statuses, and status changes on a task with no queue record, refuse the whole save. <code>lh_tasks_info</code> also returns <code>statuses</code>, the value and label pairs for the control.</p><h3 class=\"wp-block-heading\">Task page</h3><ul class=\"wp-block-list\"><li>Staff get a <strong>Staff</strong> form on every task: status, release the claim (naming who holds it), reset retries (showing how many are used), and an optional note that only staff see. A note on its own is added as an ordinary note.</li><li>On a master task&#8217;s checklist, staff get a <strong>Resolve</strong> button on each open subtask they cannot mark done themselves, such as a fee a captain has paid. It posts to the master&#8217;s page and comes back there, and the master resolves on its own when its last subtask is finished.</li></ul><h3 class=\"wp-block-heading\">edit_task() changes</h3><ul class=\"wp-block-list\"><li>Refuses a status that is not in <code>return_statuses()</code> (<code>lh_tasks_invalid_status</code>), and a status or claim change on a task with no queue record (<code>lh_tasks_no_status_row</code>). Before, PHP callers could store any key.</li><li>Logs <code>to_assigned_to</code> when the assignment changes and <code>claim_released_from</code> when a claim is released.</li><li>Fires <code>lh_tasks_task_completed</code> when it moves a task into Resolved or Closed from any other status, so follow-up reminders and notifications are cleared as on every other route to a finished task. Before, a staff resolve left them in place.</li></ul><h3 class=\"wp-block-heading\">Other abilities</h3><p class=\"wp-block-paragraph\">Review and add-note were already open to staff on the task page, and the editor&#8217;s Assigned to picker covers staff reassignment. Complete, fail, reassign and renew-claim are claim-holder actions for agents; staff reach the same end states with the status control.</p>"^^rdf:XMLLiteral ;
  sioc:content "Part of: LH TasksSince 1.29.0 (#153082) everything the edit-task ability does to a task&#8217;s workflow can be done in the UI too: MCP abilities are never the only route to an action. Both routes below go through LH_Tasks_task_actions_class::edit_task(), so the change is logged as an admin_override entry and fires the same actions as the ability. Both need the task capability (staff).Block editorThe Task queue panel has a Change status control with every workflow status, a Release claim button while the task is claimed, and a Reset retries button once retries have been used, each with a way to undo before saving. Releasing the claim on a Claimed or In Progress task also sets it back to New. Changes save with Update, logged with the note &#8220;Changed in the block editor.&#8221;They go through their own REST field, lh_tasks_workflow (status, claimed_by, retry_count; edit context, task capability), not lh_tasks. The block editor only sends fields that were edited, so a save that changes only the due date never carries a stale status back over a claim an agent made meanwhile. claimed_by and retry_count only ever release or reset: sending 0 clears them, and any other value changes nothing. Unknown statuses, and status changes on a task with no queue record, refuse the whole save. lh_tasks_info also returns statuses, the value and label pairs for the control.Task pageStaff get a Staff form on every task: status, release the claim (naming who holds it), reset retries (showing how many are used), and an optional note that only staff see. A note on its own is added as an ordinary note.On a master task&#8217;s checklist, staff get a Resolve button on each open subtask they cannot mark done themselves, such as a fee a captain has paid. It posts to the master&#8217;s page and comes back there, and the master resolves on its own when its last subtask is finished.edit_task() changesRefuses a status that is not in return_statuses() (lh_tasks_invalid_status), and a status or claim change on a task with no queue record (lh_tasks_no_status_row). Before, PHP callers could store any key.Logs to_assigned_to when the assignment changes and claim_released_from when a claim is released.Fires lh_tasks_task_completed when it moves a task into Resolved or Closed from any other status, so follow-up reminders and notifications are cleared as on every other route to a finished task. Before, a staff resolve left them in place.Other abilitiesReview and add-note were already open to staff on the task page, and the editor&#8217;s Assigned to picker covers staff reassignment. Complete, fail, reassign and renew-claim are claim-holder actions for agents; staff reach the same end states with the status control." ;
  sioc:topic <https://lhero.org/?taxonomy=author&term=cap-1> .

<https://lhero.org/author/1/#account> rdfs:seeAlso <https://lhero.org/author/1/?feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=author&term=cap-1> rdfs:seeAlso <https://lhero.org/?taxonomy=author&term=cap-1&feed=lhrdf&format=turtle> .
