kin: KIN-048 Post-pipeline hook: автокоммит после успешного завершения задачи. git add -A && git commit -m 'kin: TASK_ID TITLE'. Срабатывает автоматически как rebuild-frontend.
This commit is contained in:
parent
8a6f280cbd
commit
ae21e48b65
13 changed files with 1554 additions and 65 deletions
|
|
@ -14,6 +14,15 @@ VALID_TASK_STATUSES = [
|
|||
"blocked", "decomposed", "cancelled",
|
||||
]
|
||||
|
||||
VALID_COMPLETION_MODES = {"auto_complete", "review"}
|
||||
|
||||
|
||||
def validate_completion_mode(value: str) -> str:
|
||||
"""Validate completion mode from LLM output. Falls back to 'review' if invalid."""
|
||||
if value in VALID_COMPLETION_MODES:
|
||||
return value
|
||||
return "review"
|
||||
|
||||
|
||||
def _row_to_dict(row: sqlite3.Row | None) -> dict | None:
|
||||
"""Convert sqlite3.Row to dict with JSON fields decoded."""
|
||||
|
|
@ -220,6 +229,32 @@ def add_decision(
|
|||
return _row_to_dict(row)
|
||||
|
||||
|
||||
def add_decision_if_new(
|
||||
conn: sqlite3.Connection,
|
||||
project_id: str,
|
||||
type: str,
|
||||
title: str,
|
||||
description: str,
|
||||
category: str | None = None,
|
||||
tags: list | None = None,
|
||||
task_id: str | None = None,
|
||||
) -> dict | None:
|
||||
"""Add a decision only if no existing one matches (project_id, type, normalized title).
|
||||
|
||||
Returns the new decision dict, or None if skipped as duplicate.
|
||||
"""
|
||||
existing = conn.execute(
|
||||
"""SELECT id FROM decisions
|
||||
WHERE project_id = ? AND type = ?
|
||||
AND lower(trim(title)) = lower(trim(?))""",
|
||||
(project_id, type, title),
|
||||
).fetchone()
|
||||
if existing:
|
||||
return None
|
||||
return add_decision(conn, project_id, type, title, description,
|
||||
category=category, tags=tags, task_id=task_id)
|
||||
|
||||
|
||||
def get_decisions(
|
||||
conn: sqlite3.Connection,
|
||||
project_id: str,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue