Skip to content

Commit fc33c4c

Browse files
committed
Preserve governed effect metadata in bridge
1 parent d4f023b commit fc33c4c

2 files changed

Lines changed: 36 additions & 5 deletions

File tree

bridges/mezzanine_bridge/lib/app_kit/bridges/mezzanine_bridge/effect_adapter.ex

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,27 @@ defmodule AppKit.Bridges.MezzanineBridge.EffectAdapter do
100100
receipt_ref: run.effect.receipt_ref,
101101
dispatch_ref: run.effect.dispatch_ref,
102102
expected_version: run.effect.expected_version,
103-
metadata: %{
104-
"trace_summary_hash" => Map.get(projection, "trace_summary_hash")
105-
}
103+
metadata: metadata_from_run(run, projection)
106104
})
107105
end
108106

109107
defp command_value(command, key), do: Map.get(command, key, Map.get(command, to_string(key)))
108+
109+
defp metadata_from_run(%Run{} = run, projection) do
110+
run.command
111+
|> command_value(:metadata)
112+
|> normalize_metadata()
113+
|> put_optional("trace_summary_hash", Map.get(projection, "trace_summary_hash"))
114+
|> put_optional("evidence_refs", Map.get(projection, "evidence_refs"))
115+
end
116+
117+
defp normalize_metadata(%{} = metadata) do
118+
Map.new(metadata, fn {key, value} -> {to_string(key), value} end)
119+
end
120+
121+
defp normalize_metadata(_metadata), do: %{}
122+
123+
defp put_optional(metadata, _key, nil), do: metadata
124+
defp put_optional(metadata, _key, []), do: metadata
125+
defp put_optional(metadata, key, value), do: Map.put(metadata, key, value)
110126
end

bridges/mezzanine_bridge/test/app_kit/bridges/mezzanine_bridge_governed_effect_integration_test.exs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ defmodule AppKit.Bridges.MezzanineBridgeGovernedEffectIntegrationTest do
2929

3030
assert proposed.effect_ref == attrs.effect_ref
3131
assert proposed.status == "proposed"
32+
assert proposed.metadata["diagnostic_lane"] == "echo"
33+
assert proposed.metadata["product_slug"] == "app-kit"
3234

3335
assert {:ok, %Run{} = run} = Coordinator.propose(command_attrs(attrs))
3436

@@ -40,6 +42,9 @@ defmodule AppKit.Bridges.MezzanineBridgeGovernedEffectIntegrationTest do
4042

4143
assert readback.effect_ref == proposed.effect_ref
4244
assert readback.status == "proposed"
45+
assert readback.metadata["diagnostic_lane"] == "echo"
46+
assert readback.metadata["product_slug"] == "app-kit"
47+
assert readback.metadata["trace_summary_hash"]
4348

4449
assert {:ok, %EffectTimelineDTO{} = timeline} =
4550
EffectSurface.get_effect_timeline(context(), attrs.effect_ref,
@@ -227,7 +232,8 @@ defmodule AppKit.Bridges.MezzanineBridgeGovernedEffectIntegrationTest do
227232
trace_ref: Map.fetch!(attrs, :trace_ref),
228233
expected_version: Map.fetch!(attrs, :expected_version),
229234
operation: Map.fetch!(attrs, :effect_type),
230-
payload: diagnostic_payload(attrs)
235+
payload: diagnostic_payload(attrs),
236+
metadata: diagnostic_metadata(attrs)
231237
}
232238
end
233239

@@ -282,6 +288,14 @@ defmodule AppKit.Bridges.MezzanineBridgeGovernedEffectIntegrationTest do
282288

283289
defp diagnostic_payload(attrs), do: %{"message" => "AppKit #{attrs.token} integration"}
284290

291+
defp diagnostic_metadata(attrs) do
292+
%{
293+
"diagnostic_lane" => "echo",
294+
"product_slug" => "app-kit",
295+
"run_ref" => "run://app-kit/integration/#{attrs.token}"
296+
}
297+
end
298+
285299
defp effect_attrs(token, opts \\ []) do
286300
effect_type = Keyword.get(opts, :effect_type, "diagnostic.echo")
287301

@@ -295,7 +309,8 @@ defmodule AppKit.Bridges.MezzanineBridgeGovernedEffectIntegrationTest do
295309
installation_ref: "installation://app-kit/default",
296310
status: "proposed",
297311
trace_ref: "trace:app-kit-integration-#{token}",
298-
expected_version: 1
312+
expected_version: 1,
313+
metadata: diagnostic_metadata(%{token: token})
299314
}
300315
end
301316

0 commit comments

Comments
 (0)