Task — engineering-spec@1

"1.4.x — stuck-WIP hub sentinel + signed HITL verdict artifacts"

doneTASK-IMP-143
module improvement · class product · priority p2 · created 2026-07-23 · shipped null
depends on TASK-IMP-140, TASK-CUO-303 · blocks TASK-IMP-144

TASK-IMP-143: 1.4.x stuck-WIP hub + signed HITL

Summary

Promote G13's report-only stuck-WIP detector onto the status hub as a visible triage surface (threshold N=30 days, operator decides), and replace honor-system --verdict-by actor strings with content-addressed attributed HITL verdict artifacts that gate flips must mint and bind.

Problem

  1. G13 (test_benchmark_gates.sh::t_g13) finds in-flight tasks older than 30 days, but only as suite stdout — operators never see it on the status hub they already open.
  2. TASK-CUO-303 records a human verdict path (--verdict-by + --verdict-evidence), but the actor string is honor-system: any string unlocks the gate. Named Non-Goal of CUO-303; 1.4.x owns attribution.

Proposed Solution

  1. Stuck-WIP hub sentinelrender-status-hub.mjs renders a "Stuck WIP (G13)" section listing in-flight tasks whose age exceeds N=30 days against a deterministic as-of date (CHANGELOG date for the current VERSION, overridable by CYBEROS_NOW / CYBEROS_HUB_ASOF). Each row links the task id for triage (resume / route_back / on_hold). Report-only: no status mutation. As-of is committed-input-derived so TASK-IMP-082's fp- stamp stays byte-stable without an env pin.
  2. Attributed verdict artifacts — on every HITL gate flip, backlog-mutate mints (or validates) a content-addressed verdict JSON under docs/tasks/_verdicts/ carrying {schema, actor, timestamp, task_id, from, to, evidence_path, evidence_sha256, artifact_sha256} where artifact_sha256 hashes the canonical payload excluding itself. Gate flips refuse (exit 8) when the evidence file is missing/empty (unchanged) or when a pre-supplied artifact fails hash/actor/transition binding. The minted path is recorded on the flip JSON envelope and in the status_overridden reason field (evidence path remains the human note; artifact path is additional attribution).

Alternatives Considered

Success Metrics

Scope

In scope

Out of scope / Non-Goals

Dependencies

depends_on: [TASK-IMP-140, TASK-CUO-303] — both done. Soft: TASK-IMP-082 (stamp), TASK-IMP-108 (staleness render pattern).

AI Authorship Disclosure

1. Description

Acceptance Criteria

Test plan

  1. bash tools/docs-site/tests/test_stuck_wip_hub.sh
  2. bash tools/install/tests/test_verdict_artifact.sh
  3. bash tools/install/tests/test_hitl_lock.sh
  4. bash .cyberos/cuo/gates/run-gates.sh