Skip to content

feat(unic-archon-dlc): /build's loop has no deterministic exit for "blocked, needs a human" #656

Closed as not planned

Description

@msvujnovic-becklyn

Observed

Two runs of unic-dlc-build (unic-archon-dlc 0.29.0, Archon 0.11.1, Windows 11), Consumer Becklyn-Studios/pr-review-agent.

Run 34f986ef: the loop spun until killed.

  • Slice review-instructions could not take RED: its eval (pnpm eval review-core) had no model gateway inside the Archon worktree (MODEL_CALL_FAILED).
  • 16 consecutive iterations each spawned a fresh session, re-ran the eval, reported BLOCKED, appended a "RERUN n" note to build-state.json, and did not emit COMPLETE.
  • From iteration 14 on, the iterations themselves recommended stopping the loop.
  • The loop ended only when the operator pressed Ctrl+C.

Run 9ff2d6da (resumed): the loop exited by accident.

  • Slice acceptance-run is live-only (test_command_planned: true; it needs a deploy and a real PR on a sandbox repository).
  • 14 identical BLOCKED iterations followed.
  • Then: Loop node 'run-build' completed after 14 iterations, with acceptance-run still pending.
  • The final iteration's message ends with "I have not emitted ``". The word appears to have been consumed by the legacy prose until: COMPLETE match.
  • Earlier iterations with similar wording ("Not emitted: COMPLETE", "I did not emit COMPLETE") did not stop the loop.

At startup Archon warns about this exact node:

Node 'run-build': the prose 'loop.until' completion signal is deprecated. Declare 'loop.until_bash' (deterministic check) or 'loop.until_field' (a declared boolean in output_format) instead

Why it matters

  • Cost. A blocked slice spends up to max_iterations (60) fresh sessions producing the same BLOCKED report.
  • Unpredictable exit. Whether the loop exits depends on how the agent phrases its refusal.
  • Early exit. The same accidental match could end the loop with slices still unbuilt and unblocked. For example, "I won't emit COMPLETE until checkout is green" in slice 3 would send 15 unbuilt slices to review.

The escape hatch itself is right: a blocked loop should exit to the report and the gate. It just needs to be deliberate.

Suggested

  • Migrate run-build to loop.until_field, with a declared status: complete | blocked (plus the blocking slice and reason) in output_format, as Archon's deprecation warning asks.
  • Route blocked to report and the gate, naming the blocker, without opening a PR.
  • Optionally, have /tickets keep live-only slices (test_command_planned plus outward actions such as deploys) out of the build baton entirely, and relabel their tracker items ready-for-human.

Not decided

  • Whether a blocked run should still run implement-review-precheck and goals-check on the slices that did go green.
  • Whether a repeat-blocked threshold (for example, N identical BLOCKED iterations) should also exit, as a guard for agents that fail to set the field.

Activity

  1. orioltf commented on Oct 30, 2026

    @orioltf
    Member

    Closed as superseded, by the maintainer's decision on 2026-10-30 to apply #678's rule here too: unic-archon-dlc is frozen and the DLC leaves Archon (#677). Reason for this ticket: it carries one line to #687: a loop with no deterministic exit for "blocked, needs a human" is a capability the successor needs.

    — unic-sdlc-orchestrator-9

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions