diff --git a/core/db.py b/core/db.py index 2272be7..cebb6f0 100644 --- a/core/db.py +++ b/core/db.py @@ -612,16 +612,18 @@ def _migrate(conn: sqlite3.Connection): conn.commit() # Migrate pipelines: add parent_pipeline_id and department columns (KIN-098) - pipeline_cols = {r[1] for r in conn.execute("PRAGMA table_info(pipelines)").fetchall()} - if "parent_pipeline_id" not in pipeline_cols: - conn.execute("ALTER TABLE pipelines ADD COLUMN parent_pipeline_id INTEGER REFERENCES pipelines(id)") - conn.commit() - if "department" not in pipeline_cols: - conn.execute("ALTER TABLE pipelines ADD COLUMN department TEXT") - conn.commit() - if "pid" not in pipeline_cols: - conn.execute("ALTER TABLE pipelines ADD COLUMN pid INTEGER") - conn.commit() + # Guard: table may not exist in legacy schemas without pipelines (old test fixtures) + if "pipelines" in existing_tables: + pipeline_cols = {r[1] for r in conn.execute("PRAGMA table_info(pipelines)").fetchall()} + if "parent_pipeline_id" not in pipeline_cols: + conn.execute("ALTER TABLE pipelines ADD COLUMN parent_pipeline_id INTEGER REFERENCES pipelines(id)") + conn.commit() + if "department" not in pipeline_cols: + conn.execute("ALTER TABLE pipelines ADD COLUMN department TEXT") + conn.commit() + if "pid" not in pipeline_cols: + conn.execute("ALTER TABLE pipelines ADD COLUMN pid INTEGER") + conn.commit() # Create department_handoffs table (KIN-098) if "department_handoffs" not in existing_tables: diff --git a/tests/test_qa_gaps.py b/tests/test_qa_gaps.py index 586e1c6..1fa5d0d 100644 --- a/tests/test_qa_gaps.py +++ b/tests/test_qa_gaps.py @@ -394,22 +394,19 @@ class TestPmPromptStatusFieldConsistency: "Issue 3 has been fixed — update or remove this test." ) - def test_pm_prompt_mentions_status_values_after_example(self): - """Line after main example mentions 'Valid values for status: done, blocked'. + def test_pm_prompt_does_not_mention_status_values_after_example(self): + """Orphaned 'Valid values for status' line was removed from pm.md. - Documents that this note appears AFTER the main example, causing ambiguity. + Issue 3 fixed: the ambiguous note that appeared after the main JSON example + and referenced a 'status' field absent from that example has been deleted. """ with open("agents/prompts/pm.md") as f: content = f.read() - assert 'Valid values for `status`' in content, ( - "Expected 'Valid values for `status`' in pm.md — did the prompt change?" + assert 'Valid values for `status`' not in content, ( + "Orphaned 'Valid values for `status`' line was re-introduced in pm.md" ) - # Confirm it references done and blocked - assert '"done"' in content - assert '"blocked"' in content - def test_pm_blocked_protocol_example_uses_reason_not_blocked_reason(self): """The Blocked Protocol JSON example uses 'reason' (not 'blocked_reason'). diff --git a/web/frontend/src/views/ProjectView.vue b/web/frontend/src/views/ProjectView.vue index 803c3da..1ae6da9 100644 --- a/web/frontend/src/views/ProjectView.vue +++ b/web/frontend/src/views/ProjectView.vue @@ -696,6 +696,12 @@ async function addDecision() { + +
+

⚠ {{ uploadWarning }}

+ +
+