From abe93872bc06d166af4a06d1092ea8f2cfe4fe80 Mon Sep 17 00:00:00 2001 From: Hussain Nagaria Date: Sat, 29 Aug 2026 05:39:34 +0530 Subject: [PATCH 1/2] feat: remove the UAT feature MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit UAT approval is dropped from Hive: the `uat_section`, `uat_status`, `uat_approved_by` and `uat_date` fields on Hive Task, the `approve_uat` and `reject_uat` document methods, the panel section clients acted on, the board badge and the activity-feed label. The `uat_*` columns stay on `tabHive Task` — Frappe does not drop a column when its field goes — so the old values remain readable in the database until someone chooses to drop them. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_014AupF7Eoc6JnGv1gaiQY6G --- bwh_hive/bwh_hive/api.py | 1 - .../bwh_hive/doctype/hive_task/hive_task.json | 30 -------- .../bwh_hive/doctype/hive_task/hive_task.py | 17 ----- e2e/tests/client-experience.spec.ts | 5 -- .../src/components/projects/ActivityTab.vue | 1 - .../src/components/projects/ProjectHeader.vue | 3 +- .../components/projects/ProjectTasksTab.vue | 5 +- frontend/src/components/tasks/TaskBoard.vue | 4 +- .../src/components/tasks/TaskBoardCard.vue | 12 +--- frontend/src/components/tasks/TaskPanel.vue | 68 +------------------ frontend/src/lib/status.ts | 11 --- frontend/src/pages/ProjectDetailPage.vue | 2 - frontend/src/pages/TasksPage.vue | 1 - frontend/src/types.ts | 6 -- 14 files changed, 7 insertions(+), 159 deletions(-) diff --git a/bwh_hive/bwh_hive/api.py b/bwh_hive/bwh_hive/api.py index 46c62ac..f8a20dc 100644 --- a/bwh_hive/bwh_hive/api.py +++ b/bwh_hive/bwh_hive/api.py @@ -851,7 +851,6 @@ def get_project_activity(project: str, limit: int = 100): "start_date", "completed_on", "size", - "uat_status", ): activities.append( { diff --git a/bwh_hive/bwh_hive/doctype/hive_task/hive_task.json b/bwh_hive/bwh_hive/doctype/hive_task/hive_task.json index 1fb8888..1893a6e 100644 --- a/bwh_hive/bwh_hive/doctype/hive_task/hive_task.json +++ b/bwh_hive/bwh_hive/doctype/hive_task/hive_task.json @@ -23,10 +23,6 @@ "recurring_parent", "pr_link", "description", - "uat_section", - "uat_status", - "uat_approved_by", - "uat_date", "github_issue_url" ], "fields": [ @@ -144,32 +140,6 @@ "fieldtype": "Text Editor", "label": "Description" }, - { - "fieldname": "uat_section", - "fieldtype": "Section Break", - "label": "UAT" - }, - { - "default": "Pending", - "fieldname": "uat_status", - "fieldtype": "Select", - "in_standard_filter": 1, - "label": "UAT Status", - "options": "Pending\nApproved\nRejected" - }, - { - "fieldname": "uat_approved_by", - "fieldtype": "Link", - "label": "UAT Approved By", - "options": "User", - "read_only": 1 - }, - { - "fieldname": "uat_date", - "fieldtype": "Date", - "label": "UAT Date", - "read_only": 1 - }, { "fieldname": "github_issue_url", "fieldtype": "Data", diff --git a/bwh_hive/bwh_hive/doctype/hive_task/hive_task.py b/bwh_hive/bwh_hive/doctype/hive_task/hive_task.py index 7826e6d..ee56328 100644 --- a/bwh_hive/bwh_hive/doctype/hive_task/hive_task.py +++ b/bwh_hive/bwh_hive/doctype/hive_task/hive_task.py @@ -62,9 +62,6 @@ class HiveTask(Document): start_date: DF.Date | None status: DF.Literal["Someday", "Backlog", "To Do", "In Progress", "Done", "Blocked"] title: DF.Data - uat_approved_by: DF.Link | None - uat_date: DF.Date | None - uat_status: DF.Literal["Pending", "Approved", "Rejected"] # end: auto-generated types def validate(self): @@ -178,17 +175,3 @@ def _maybe_spawn_recurrence(self): title="recurring task: assign failed", message=f"Failed to assign {assignees} to {new_task.name}", ) - - @frappe.whitelist() - def approve_uat(self): - self.uat_status = "Approved" - self.uat_approved_by = frappe.session.user - self.uat_date = today() - self.save() - - @frappe.whitelist() - def reject_uat(self): - self.uat_status = "Rejected" - self.uat_approved_by = frappe.session.user - self.uat_date = today() - self.save() diff --git a/e2e/tests/client-experience.spec.ts b/e2e/tests/client-experience.spec.ts index b9d1925..3d98374 100644 --- a/e2e/tests/client-experience.spec.ts +++ b/e2e/tests/client-experience.spec.ts @@ -153,11 +153,6 @@ test.describe("Client Experience", () => { await expect(panel.getByLabel("Title")).toBeVisible(); await expect(panel.getByLabel("Title")).toBeDisabled(); await expect(panel.getByLabel("Assignees")).toBeDisabled(); - - // UAT is the one thing a client is meant to act on. - await expect( - panel.getByRole("button", { name: /Approve/ }).first(), - ).toBeVisible(); }); test("a client can raise a feature request", async ({ page, request }) => { diff --git a/frontend/src/components/projects/ActivityTab.vue b/frontend/src/components/projects/ActivityTab.vue index 5e1afab..4f278f4 100644 --- a/frontend/src/components/projects/ActivityTab.vue +++ b/frontend/src/components/projects/ActivityTab.vue @@ -122,7 +122,6 @@ const FIELD_LABELS: Record = { status: 'status', target_date: 'target date', title: 'title', - uat_status: 'UAT status', } const DOC_LABELS: Record = { diff --git a/frontend/src/components/projects/ProjectHeader.vue b/frontend/src/components/projects/ProjectHeader.vue index befbe9f..f77b00c 100644 --- a/frontend/src/components/projects/ProjectHeader.vue +++ b/frontend/src/components/projects/ProjectHeader.vue @@ -136,8 +136,7 @@ - +

GitHub

@@ -58,10 +57,8 @@ const props = withDefaults( assigneesByTask?: Record loading?: boolean readonly?: boolean - /** UAT badges only mean something on a project that has a client. */ - hasClient?: boolean }>(), - { assigneesByTask: () => ({}), loading: false, readonly: false, hasClient: true }, + { assigneesByTask: () => ({}), loading: false, readonly: false }, ) const emit = defineEmits<{ select: [task: HiveTask]; changed: [] }>() diff --git a/frontend/src/components/tasks/TaskBoard.vue b/frontend/src/components/tasks/TaskBoard.vue index a86bf86..213eefa 100644 --- a/frontend/src/components/tasks/TaskBoard.vue +++ b/frontend/src/components/tasks/TaskBoard.vue @@ -30,7 +30,6 @@ :task="element" :assignees="assigneesByTask[element.name]" :depends-on="dependency(element)" - :show-uat="showUat" :draggable="!readonly" @select="emit('select', element)" /> @@ -73,9 +72,8 @@ const props = withDefaults( list?: TaskListHandle /** Clients see the board but cannot move cards. */ readonly?: boolean - showUat?: boolean }>(), - { assigneesByTask: () => ({}), readonly: false, showUat: true }, + { assigneesByTask: () => ({}), readonly: false }, ) const emit = defineEmits<{ select: [task: HiveTask]; changed: [] }>() diff --git a/frontend/src/components/tasks/TaskBoardCard.vue b/frontend/src/components/tasks/TaskBoardCard.vue index 7ebf72e..d192903 100644 --- a/frontend/src/components/tasks/TaskBoardCard.vue +++ b/frontend/src/components/tasks/TaskBoardCard.vue @@ -49,12 +49,6 @@ > -
-
-
- UAT status - -
-

- {{ task.doc.uat_status === 'Approved' ? 'Approved' : 'Rejected' }} by - {{ task.doc.uat_approved_by }} - -

-
-
-
- @@ -293,7 +250,6 @@