mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-11-11 05:11:49 +01:00
Fix final Greptile decomposition follow-ups
This commit is contained in:
1 parent
ac4dee8579
commit
85b9dfcaeb
4 files changed
+35
-22
No files matched your search
@@ -3456,6 +3456,7 @@ describeEmbeddedPostgres("accepted plan decomposition", () => {
|
||||
actorAgentId: assigneeAgentId,
|
||||
});
|
||||
|
||||
expect(first.decomposition).not.toHaveProperty("requestedChildren");
|
||||
expect(first.childIssueIds).toHaveLength(2);
|
||||
expect(first.newlyCreatedIssues).toHaveLength(2);
|
||||
expect(first.decomposition.status).toBe("completed");
|
||||
|
||||
@@ -32,6 +32,7 @@ import {
|
||||
projects,
|
||||
} from "@paperclipai/db";
|
||||
import type {
|
||||
AcceptedPlanDecomposition,
|
||||
IssueCommentAuthorType,
|
||||
IssueCommentMetadata,
|
||||
IssueCommentPresentation,
|
||||
@@ -288,6 +289,28 @@ type IssueLastActivityStat = {
|
||||
latestCommentAt: Date | null;
|
||||
latestLogAt: Date | null;
|
||||
};
|
||||
|
||||
function serializeAcceptedPlanDecomposition(
|
||||
decomposition: IssuePlanDecompositionRow,
|
||||
): AcceptedPlanDecomposition {
|
||||
return {
|
||||
id: decomposition.id,
|
||||
companyId: decomposition.companyId,
|
||||
sourceIssueId: decomposition.sourceIssueId,
|
||||
acceptedPlanRevisionId: decomposition.acceptedPlanRevisionId,
|
||||
acceptedInteractionId: decomposition.acceptedInteractionId,
|
||||
status: decomposition.status as AcceptedPlanDecomposition["status"],
|
||||
requestFingerprint: decomposition.requestFingerprint,
|
||||
requestedChildCount: decomposition.requestedChildCount,
|
||||
childIssueIds: normalizeIssuePlanDecompositionChildIds(decomposition.childIssueIds),
|
||||
ownerAgentId: decomposition.ownerAgentId,
|
||||
ownerUserId: decomposition.ownerUserId,
|
||||
ownerRunId: decomposition.ownerRunId,
|
||||
completedAt: decomposition.completedAt,
|
||||
createdAt: decomposition.createdAt,
|
||||
updatedAt: decomposition.updatedAt,
|
||||
};
|
||||
}
|
||||
type IssueUserContextInput = {
|
||||
createdByUserId: string | null;
|
||||
assigneeUserId: string | null;
|
||||
@@ -4356,9 +4379,11 @@ export function issueService(db: Db) {
|
||||
.map((childIssueId) => childIssueMap.get(childIssueId))
|
||||
.filter((row): row is typeof issues.$inferSelect => Boolean(row));
|
||||
|
||||
const decomposition = serializeAcceptedPlanDecomposition(currentClaim);
|
||||
|
||||
return {
|
||||
decomposition: currentClaim,
|
||||
childIssueIds,
|
||||
decomposition,
|
||||
childIssueIds: decomposition.childIssueIds,
|
||||
childIssues: orderedChildIssues,
|
||||
newlyCreatedIssues,
|
||||
};
|
||||
@@ -4414,24 +4439,10 @@ export function issueService(db: Db) {
|
||||
const childIssueMap = new Map(childIssueRows.map((row) => [row.id, row]));
|
||||
|
||||
return rows.map((row) => {
|
||||
const decomposition = row.decomposition;
|
||||
const childIds = normalizeIssuePlanDecompositionChildIds(decomposition.childIssueIds);
|
||||
const decomposition = serializeAcceptedPlanDecomposition(row.decomposition);
|
||||
const childIds = decomposition.childIssueIds;
|
||||
return {
|
||||
id: decomposition.id,
|
||||
companyId: decomposition.companyId,
|
||||
sourceIssueId: decomposition.sourceIssueId,
|
||||
acceptedPlanRevisionId: decomposition.acceptedPlanRevisionId,
|
||||
acceptedInteractionId: decomposition.acceptedInteractionId,
|
||||
status: decomposition.status,
|
||||
requestFingerprint: decomposition.requestFingerprint,
|
||||
requestedChildCount: decomposition.requestedChildCount,
|
||||
childIssueIds: childIds,
|
||||
ownerAgentId: decomposition.ownerAgentId,
|
||||
ownerUserId: decomposition.ownerUserId,
|
||||
ownerRunId: decomposition.ownerRunId,
|
||||
completedAt: decomposition.completedAt,
|
||||
createdAt: decomposition.createdAt,
|
||||
updatedAt: decomposition.updatedAt,
|
||||
...decomposition,
|
||||
acceptedPlanRevisionNumber: row.revisionNumber ?? null,
|
||||
childIssues: childIds
|
||||
.map((childId) => childIssueMap.get(childId) ?? null)
|
||||
|
||||
@@ -55,7 +55,7 @@ export function IssuePlanDecompositionsSection({
|
||||
<ul className="space-y-3">
|
||||
{items.map((record) => {
|
||||
const requested = record.requestedChildCount ?? 0;
|
||||
const created = record.childIssues?.length ?? 0;
|
||||
const created = record.childIssueIds?.length ?? 0;
|
||||
const ownerName = record.ownerAgentId
|
||||
? agentMap?.get(record.ownerAgentId)?.name ?? "agent"
|
||||
: null;
|
||||
|
||||
@@ -897,8 +897,8 @@ describe("IssueDetail", () => {
|
||||
acceptedInteractionId: null,
|
||||
status: "completed",
|
||||
requestFingerprint: "fingerprint-1",
|
||||
requestedChildCount: 1,
|
||||
childIssueIds: ["issue-2"],
|
||||
requestedChildCount: 2,
|
||||
childIssueIds: ["issue-2", "issue-3"],
|
||||
childIssues: [
|
||||
{
|
||||
id: "issue-2",
|
||||
@@ -932,6 +932,7 @@ describe("IssueDetail", () => {
|
||||
|
||||
expect(container.textContent).toContain("Plan decomposition");
|
||||
expect(container.textContent).toContain("Plan revision 2");
|
||||
expect(container.textContent).toContain("2 of 2 child issues created");
|
||||
expect(container.textContent).toContain("First child issue");
|
||||
expect(mockIssuesApi.listAcceptedPlanDecompositions).toHaveBeenCalledWith("issue-1");
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user