Skip to content

feat(consilium): ticket-first loops — auto commitPrefix, ticket in MR body, require-ticket gate - #579

Merged
100rd merged 1 commit into
mainfrom
feat/ticket-first-intake
Jul 22, 2026
Merged

feat(consilium): ticket-first loops — auto commitPrefix, ticket in MR body, require-ticket gate#579
100rd merged 1 commit into
mainfrom
feat/ticket-first-intake

Conversation

@100rd

@100rd 100rd commented Jul 22, 2026

Copy link
Copy Markdown
Owner

Проблема

Forge werush отклоняет push без Jira-ключа в каждом коммите → develop-раунды не публиковались (ветка локально цела, MR не открывался), а тикет не попадал в описание MR. Пользователь дал PDO-922 — в MR его не было.

Фикс

  • Тикетный интейк ставит commitPrefix сам: launchTicketReviewReviewLaunchPlan.commitPrefix = "<KEY>: " → фабрика → каждый коммит кодера и тайтл MR несут ключ (механика commitPrefix уже существовала — теперь она заполняется).
  • Тикет в теле MR: строка - Ticket: <KEY> — <url> в заголовке buildPrStatusBody, из launch-провенанса лупа (SdlcHandoffRequest.ticketRef). Санитизировано, display-only.
  • requireTicketRef (config, default false): ручной запуск без тикет-ключа → actionable 400 (поле Jira в диалоге уже существует и шлёт commitPrefix).
  • Попутно: в regex titleLabel (PR feat(intake): ADR-004 Block A — direct ticket intake, one MR per task #573) оказались сырые контрол-байты — rg считал файл бинарным; заменены на \u-эскейпы.

Тесты

180 passed (dispatch/route/executor/fsm), tsc чистый. Новые кейсы: auto-prefix из тикета; 400 без ключа при включённом флаге; 201 с ключом.

… body, require-ticket gate

The werush forge rejects any push whose commits lack a Jira issue key,
so every develop round published nothing (branch intact locally, MR
never opened) — and the ticket never reached the MR description.

- Ticket intake (launchTicketReview) now sets the loop's commitPrefix
  to '<KEY>: ' automatically (ReviewLaunchPlan.commitPrefix threaded to
  the factory) — every coder commit subject and the Draft-PR/MR title
  carry the key, so issue-key push policies pass.
- The Draft-PR/MR BODY gains a ticket provenance line (key + link),
  threaded from the loop's launch provenance through SdlcHandoffRequest
  into buildPrStatusBody. Display-only, sanitized.
- New config pipeline.consiliumLoop.requireTicketRef (default false):
  when on, a MANUAL launch without a ticket key is refused with an
  actionable 400 (the dialog's Jira field feeds commitPrefix).
- Cleanup: the titleLabel control-strip regex carried RAW control bytes
  (rg treated the file as binary) — replaced with \u escapes.

vitest: 180 passed across dispatch/route/executor/fsm suites. tsc clean.
@100rd
100rd merged commit 065fa9b into main Jul 22, 2026
12 checks passed
@100rd
100rd deleted the feat/ticket-first-intake branch July 22, 2026 08:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant