Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -526,9 +526,10 @@ defmodule SymphonyElixir.SymphonyPlusPlus.MCP.ArchitectProductTreeTools do
defp mutate_product_tree_with_projection(repo, work_request_id, tool, created_by, mutation_fun) do
run_architect_transaction(repo, fn ->
with {:ok, result} <- mutation_fun.(),
{:ok, _revision} <- record_current_product_tree_revision(repo, work_request_id, tool, created_by),
{:ok, detail} <- Dashboard.work_request_detail(repo, work_request_id) do
{:ok, {result, detail}}
{:ok, detail} <- Dashboard.work_request_detail(repo, work_request_id),
{:ok, _revision} <- record_product_tree_revision(repo, work_request_id, tool, created_by, detail) do
product_tree = ProductTree.project(repo, work_request_id, detail.work_packages)
{:ok, {result, %{detail | product_tree: product_tree}}}
end
end)
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ Code.require_file("../../../support/symphony_plus_plus/mcp_case.exs", __DIR__)
defmodule SymphonyElixir.SymphonyPlusPlus.MCP.WorkRequestTools03Test do
use SymphonyElixir.SymphonyPlusPlus.MCPCase

alias SymphonyElixir.SymphonyPlusPlus.ProductTree

test "claim_local_architect_assignment reclaims with full handoff scope arguments", %{repo: repo} do
work_request =
create_work_request!(repo,
Expand Down Expand Up @@ -306,6 +308,23 @@ defmodule SymphonyElixir.SymphonyPlusPlus.MCP.WorkRequestTools03Test do

grant_work_request_scope!(repo, session, work_request.id)

handler_id = "slice-progress-reads-#{work_request.id}"
counter = :counters.new(1, [])

:ok =
:telemetry.attach(
handler_id,
repo.config()[:telemetry_prefix] ++ [:query],
fn _event, _measurements, metadata, {owner, counter} ->
if self() == owner and String.contains?(metadata.query, ~s(FROM "sympp_progress_events")) do
:counters.add(counter, 1, 1)
end
end,
{self(), counter}
)

on_exit(fn -> :telemetry.detach(handler_id) end)

response =
mcp_tool(repo, session, "slice_work_request", %{
"work_request_id" => work_request.id,
Expand All @@ -322,7 +341,12 @@ defmodule SymphonyElixir.SymphonyPlusPlus.MCP.WorkRequestTools03Test do
})

assert get_in(response, ["result", "structuredContent", "status", "work_request_status"]) == "sliced"
assert [_work_package_id] = get_in(response, ["result", "structuredContent", "work_package_ids"])
assert [work_package_id] = get_in(response, ["result", "structuredContent", "work_package_ids"])
# The 611-package Daedalus request exhausted its transaction deadline loading this history twice.
assert :counters.get(counter, 1) <= 3
assert {:ok, tree} = ProductTree.tree_for_work_request(repo, work_request.id)
assert get_in(response, ["result", "structuredContent", "product_tree_revision", "id"]) == tree.latest_revision.id
assert work_package_id in tree.latest_revision.tree_snapshot["root_work_package_ids"]
assert {:ok, %{status: "sliced"}} = WorkRequestRepository.get(repo, work_request.id)
end

Expand Down