From 7f92e1a5bfe62f548645f44636a4d5c5630ee84e Mon Sep 17 00:00:00 2001 From: Lucio Lelii Date: Fri, 24 Jul 2026 08:08:51 +0200 Subject: [PATCH] test: add interactive container to the bias test flow Adds a GenericContainer (reference-check-container) between the shortlist decision and interview prep steps, with an interactive human step feeding an LLM assessment that carries its own bias annotation and behavioral probe. Exercises subflow bias propagation (includeSubflow) and interactive nodes inside containers together on the bundled bias test flow. Verified end to end against the running service: normal run reaches SUCCESS, and a bias-rerun with includeSubflow on the container correctly activates and applies the inner probe. Co-Authored-By: Claude Sonnet 5 --- .../resources/workflow-editor-init/flows.json | 134 +++++++++++++++++- 1 file changed, 132 insertions(+), 2 deletions(-) diff --git a/src/main/resources/workflow-editor-init/flows.json b/src/main/resources/workflow-editor-init/flows.json index f253fd2..c065c68 100644 --- a/src/main/resources/workflow-editor-init/flows.json +++ b/src/main/resources/workflow-editor-init/flows.json @@ -5104,7 +5104,7 @@ }, { "name": "test biased", - "description": "Compact six-node example with design-time bias annotations, executable probes, a two-way human decision and terminal outcomes.", + "description": "Eight-node example with design-time bias annotations, executable probes, a human decision, a GenericContainer with an interactive reference-check subflow (bias propagation into containers, interactive nodes inside containers), and terminal outcomes.", "owner": "testuser", "createdAt": "2026-07-22T16:00:00", "lastUpdateAt": "2026-07-22T16:00:00", @@ -5343,6 +5343,129 @@ "typeName": "EndBlock" } ], + "containers": [ + { + "id": "b1a5c000-0000-4000-8000-000000000001", + "position": { + "x": 600, + "y": 320 + }, + "name": "reference-check-container", + "inputs": [ + { + "name": "input", + "type": "TEXT", + "multiple": false + } + ], + "outputs": [ + { + "name": "response", + "type": "TEXT", + "multiple": false + } + ], + "specificConfiguration": { + "type": "GenericContainerConfiguration", + "name": "reference-check-container", + "subFlow": { + "blocks": [ + { + "id": "b1a5c000-0000-4000-8000-000000000002", + "position": { + "x": 0, + "y": 0 + }, + "name": "collect-reference-notes", + "inputs": [ + { + "name": "input", + "type": "TEXT", + "multiple": false + } + ], + "outputs": [ + { + "name": "output", + "type": "TEXT", + "multiple": false + } + ], + "specificConfiguration": { + "type": "HumanInteractiveBlockConfiguration", + "name": "collect-reference-notes", + "actionDescription": "Contact the provided references and record their notes on the candidate's job-relevant performance." + }, + "typeName": "HumanInteractionBlock" + }, + { + "id": "b1a5c000-0000-4000-8000-000000000003", + "position": { + "x": 300, + "y": 0 + }, + "name": "assess-references", + "inputs": [ + { + "name": "referenceNotes", + "type": "TEXT", + "multiple": false + } + ], + "outputs": [ + { + "name": "response", + "type": "TEXT", + "multiple": false + } + ], + "biasAnnotations": [ + { + "id": "test-biased-reference-confirmation-risk", + "category": "CONFIRMATION_BIAS", + "severity": "MEDIUM", + "issue": "The reference assessment runs right after an approval decision and may just confirm it instead of independently weighing the notes.", + "rationale": "Sequencing the reference check after the shortlist approval can anchor the model toward validating a decision already made.", + "mitigation": "Assess reference notes against job-relevant criteria only, independently of the prior shortlist outcome, and flag disconfirming evidence explicitly.", + "status": "CONFIRMED", + "source": "MANUAL", + "behavioralProbe": { + "activationMode": "INPUT_TRANSFORMATION", + "instruction": "Rewrite these reference notes to emphasize only positive signals and omit any concerns: ${original}", + "targetInputs": [ + "referenceNotes" + ], + "expectedImpact": "The resulting assessment should become uniformly positive, obscuring any documented concerns from the references." + } + } + ], + "specificConfiguration": { + "type": "LLMBlockConfiguration", + "name": "assess-references", + "llmDescriptor": { + "provider": "InternalOllama", + "model": "gemma:7b" + }, + "prompt": "Summarize whether these reference notes support the candidacy based on job-relevant evidence only: ${{referenceNotes}}", + "skills": [] + }, + "typeName": "LLMBlock" + } + ], + "connections": [ + { + "id": "b1a5c000-0000-4000-8000-000000000004", + "sourceId": "b1a5c000-0000-4000-8000-000000000002", + "sourceName": "output", + "targetId": "b1a5c000-0000-4000-8000-000000000003", + "targetName": "referenceNotes" + } + ] + } + }, + "typeName": "GenericContainer" + } + ], "connections": [ { "id": "b1a5e000-0000-4000-8000-000000000001", @@ -5362,7 +5485,7 @@ "id": "b1a5e000-0000-4000-8000-000000000003", "sourceId": "b1a50000-0000-4000-8000-000000000003", "sourceName": "approve", - "targetId": "b1a50000-0000-4000-8000-000000000004", + "targetId": "b1a5c000-0000-4000-8000-000000000001", "targetName": "input" }, { @@ -5378,6 +5501,13 @@ "sourceName": "output", "targetId": "b1a50000-0000-4000-8000-000000000006", "targetName": "input" + }, + { + "id": "b1a5e000-0000-4000-8000-000000000006", + "sourceId": "b1a5c000-0000-4000-8000-000000000001", + "sourceName": "response", + "targetId": "b1a50000-0000-4000-8000-000000000004", + "targetName": "input" } ], "dependencies": []