feat(WP-0012): IHF Phase 11 — Advanced AI Federation
- Schema: AgentRegistration, ModelRoutingPolicy, AgentDelegation,
CollectiveProposal, CollectiveProposalContribution, AiGovernancePolicy,
AgentPerformanceRecord + ALTER TABLE agent_proposals
(migration 1744156800; CHECK constraints on trust_level, status,
consensus_status — GAAF compliant)
- Bridge: scripts/llm_bridge.py (llm-connect subprocess seam) +
Application/Helper/AgentBridge.hs (callBridge, callAgent,
checkGovernancePolicy, jsonArrayTexts)
- Routing: Application/Helper/ModelRouter.hs (resolveAgent,
resolveAllAgents) + ModelRoutingPolicies CRUD
- Registry: AgentRegistrations CRUD (Index/Show/New/Edit/Performance),
DeactivateAgentAction, ComputeAgentPerformanceAction
- Delegation: AgentDelegations controller + views, DelegateSubtaskAction
with token budget enforcement at bridge call time
- Collective: CollectiveProposals controller + views,
CreateCollectiveProposalAction (fan-out → synthesis → consensus detection)
- Governance: AiGovernancePolicies CRUD + ToggleAiGovernancePolicyAction;
checkGovernancePolicy enforced at all 4 Phase 5 invocation points
- Phase 5 wiring: replaced callClaudeApi in Widgets, DecisionRecords,
RequirementCandidates with resolveAgent + callAgent + token tracking
- llm-connect feature requests: ~/llm-connect/FEATURE_REQUESTS.md
(FR-1 HTTP serve, FR-2 RoutingPolicy, FR-3 async, FR-4 BudgetTracker)
- GAAF scorecard: 3.61 (up from 3.56); Functional 3.4→3.6, Extensions 3.8→3.9
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:57:17 +00:00
|
|
|
module Web.Controller.CollectiveProposals where
|
|
|
|
|
|
|
|
|
|
-- IHF Phase 11 — Advanced AI Federation (IHUB-WP-0012 T07)
|
2026-04-01 22:48:29 +00:00
|
|
|
-- Updated: agents invoked concurrently via callAgentsBatch (FR-3 async).
|
feat(WP-0012): IHF Phase 11 — Advanced AI Federation
- Schema: AgentRegistration, ModelRoutingPolicy, AgentDelegation,
CollectiveProposal, CollectiveProposalContribution, AiGovernancePolicy,
AgentPerformanceRecord + ALTER TABLE agent_proposals
(migration 1744156800; CHECK constraints on trust_level, status,
consensus_status — GAAF compliant)
- Bridge: scripts/llm_bridge.py (llm-connect subprocess seam) +
Application/Helper/AgentBridge.hs (callBridge, callAgent,
checkGovernancePolicy, jsonArrayTexts)
- Routing: Application/Helper/ModelRouter.hs (resolveAgent,
resolveAllAgents) + ModelRoutingPolicies CRUD
- Registry: AgentRegistrations CRUD (Index/Show/New/Edit/Performance),
DeactivateAgentAction, ComputeAgentPerformanceAction
- Delegation: AgentDelegations controller + views, DelegateSubtaskAction
with token budget enforcement at bridge call time
- Collective: CollectiveProposals controller + views,
CreateCollectiveProposalAction (fan-out → synthesis → consensus detection)
- Governance: AiGovernancePolicies CRUD + ToggleAiGovernancePolicyAction;
checkGovernancePolicy enforced at all 4 Phase 5 invocation points
- Phase 5 wiring: replaced callClaudeApi in Widgets, DecisionRecords,
RequirementCandidates with resolveAgent + callAgent + token tracking
- llm-connect feature requests: ~/llm-connect/FEATURE_REQUESTS.md
(FR-1 HTTP serve, FR-2 RoutingPolicy, FR-3 async, FR-4 BudgetTracker)
- GAAF scorecard: 3.61 (up from 3.56); Functional 3.4→3.6, Extensions 3.8→3.9
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:57:17 +00:00
|
|
|
|
|
|
|
|
import Web.Controller.Prelude
|
|
|
|
|
import Web.View.CollectiveProposals.Index
|
|
|
|
|
import Web.View.CollectiveProposals.Show
|
2026-04-01 22:48:29 +00:00
|
|
|
import Application.Helper.AgentBridge (callAgent, callAgentsBatch, BridgeResponse(..))
|
feat(WP-0012): IHF Phase 11 — Advanced AI Federation
- Schema: AgentRegistration, ModelRoutingPolicy, AgentDelegation,
CollectiveProposal, CollectiveProposalContribution, AiGovernancePolicy,
AgentPerformanceRecord + ALTER TABLE agent_proposals
(migration 1744156800; CHECK constraints on trust_level, status,
consensus_status — GAAF compliant)
- Bridge: scripts/llm_bridge.py (llm-connect subprocess seam) +
Application/Helper/AgentBridge.hs (callBridge, callAgent,
checkGovernancePolicy, jsonArrayTexts)
- Routing: Application/Helper/ModelRouter.hs (resolveAgent,
resolveAllAgents) + ModelRoutingPolicies CRUD
- Registry: AgentRegistrations CRUD (Index/Show/New/Edit/Performance),
DeactivateAgentAction, ComputeAgentPerformanceAction
- Delegation: AgentDelegations controller + views, DelegateSubtaskAction
with token budget enforcement at bridge call time
- Collective: CollectiveProposals controller + views,
CreateCollectiveProposalAction (fan-out → synthesis → consensus detection)
- Governance: AiGovernancePolicies CRUD + ToggleAiGovernancePolicyAction;
checkGovernancePolicy enforced at all 4 Phase 5 invocation points
- Phase 5 wiring: replaced callClaudeApi in Widgets, DecisionRecords,
RequirementCandidates with resolveAgent + callAgent + token tracking
- llm-connect feature requests: ~/llm-connect/FEATURE_REQUESTS.md
(FR-1 HTTP serve, FR-2 RoutingPolicy, FR-3 async, FR-4 BudgetTracker)
- GAAF scorecard: 3.61 (up from 3.56); Functional 3.4→3.6, Extensions 3.8→3.9
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:57:17 +00:00
|
|
|
import Application.Helper.ModelRouter (resolveAllAgents)
|
2026-04-12 13:11:32 +00:00
|
|
|
import qualified Data.Aeson as A
|
feat(WP-0012): IHF Phase 11 — Advanced AI Federation
- Schema: AgentRegistration, ModelRoutingPolicy, AgentDelegation,
CollectiveProposal, CollectiveProposalContribution, AiGovernancePolicy,
AgentPerformanceRecord + ALTER TABLE agent_proposals
(migration 1744156800; CHECK constraints on trust_level, status,
consensus_status — GAAF compliant)
- Bridge: scripts/llm_bridge.py (llm-connect subprocess seam) +
Application/Helper/AgentBridge.hs (callBridge, callAgent,
checkGovernancePolicy, jsonArrayTexts)
- Routing: Application/Helper/ModelRouter.hs (resolveAgent,
resolveAllAgents) + ModelRoutingPolicies CRUD
- Registry: AgentRegistrations CRUD (Index/Show/New/Edit/Performance),
DeactivateAgentAction, ComputeAgentPerformanceAction
- Delegation: AgentDelegations controller + views, DelegateSubtaskAction
with token budget enforcement at bridge call time
- Collective: CollectiveProposals controller + views,
CreateCollectiveProposalAction (fan-out → synthesis → consensus detection)
- Governance: AiGovernancePolicies CRUD + ToggleAiGovernancePolicyAction;
checkGovernancePolicy enforced at all 4 Phase 5 invocation points
- Phase 5 wiring: replaced callClaudeApi in Widgets, DecisionRecords,
RequirementCandidates with resolveAgent + callAgent + token tracking
- llm-connect feature requests: ~/llm-connect/FEATURE_REQUESTS.md
(FR-1 HTTP serve, FR-2 RoutingPolicy, FR-3 async, FR-4 BudgetTracker)
- GAAF scorecard: 3.61 (up from 3.56); Functional 3.4→3.6, Extensions 3.8→3.9
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:57:17 +00:00
|
|
|
|
|
|
|
|
instance Controller CollectiveProposalsController where
|
|
|
|
|
|
|
|
|
|
action CollectiveProposalsAction = do
|
|
|
|
|
proposals <- query @CollectiveProposal
|
|
|
|
|
|> orderByDesc #createdAt
|
|
|
|
|
|> fetch
|
|
|
|
|
render IndexView { .. }
|
|
|
|
|
|
|
|
|
|
action ShowCollectiveProposalAction { collectiveProposalId } = do
|
|
|
|
|
proposal <- fetch collectiveProposalId
|
|
|
|
|
contributions <- query @CollectiveProposalContribution
|
|
|
|
|
|> filterWhere (#collectiveProposalId, collectiveProposalId)
|
|
|
|
|
|> orderByAsc #contributedAt
|
|
|
|
|
|> fetch
|
|
|
|
|
agentNames <- forM contributions \c -> do
|
|
|
|
|
agent <- fetch c.agentRegistrationId
|
|
|
|
|
pure (c, agent.name)
|
|
|
|
|
render ShowView { proposal, agentContributions = agentNames }
|
|
|
|
|
|
|
|
|
|
action CreateCollectiveProposalAction = do
|
fix(WP-0014/A2): close remaining pure-param and structural compilation errors
Convert all remaining `<- paramOrNothing / param / paramOrDefault /
currentUserOrNothing` monadic binds to `let` — these functions are pure
(ImplicitParams-based) in IHP v1.5, so `<-` is a type error in an IO
do-block.
Controllers fixed:
AgentDelegations, AiGovernancePolicies, Annotations, ApiConsumers,
CollectiveProposals, DecisionRecords, DeploymentRecords,
HubCapabilityManifests, HubRoutingRules, InstitutionalKnowledge,
OutcomeCorrelations, RequirementCandidates, TypeRegistries,
WebhookSubscriptions, Widgets,
Api/V2/{Annotations,InteractionEvents,Token}
WebhookSubscriptions: remove orphaned `Right () ->` case arm that was
left inside a bare `unless` block (structural parse error).
Also carries forward all in-progress fixes from the working tree:
helpers (AgentBridge, ApiRateLimit, BottleneckDetector,
CrossHubPropagation, FrictionScore),
views (CanSelect instances, HSX lambda extraction, formFor wrappers),
env/build (envrc GHCi perms, flake.nix Tailwind + GHC resource limits,
static/app.css additional Tailwind output).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 01:14:08 +00:00
|
|
|
let hubId = param @(Id Hub) "hubId"
|
|
|
|
|
title = param @Text "title"
|
|
|
|
|
taskType = param @Text "taskType"
|
|
|
|
|
prompt = param @Text "prompt"
|
|
|
|
|
mWidgetId = paramOrNothing @(Id Widget) "sourceWidgetId"
|
|
|
|
|
mCandId = paramOrNothing @(Id RequirementCandidate) "sourceCandidateId"
|
feat(WP-0012): IHF Phase 11 — Advanced AI Federation
- Schema: AgentRegistration, ModelRoutingPolicy, AgentDelegation,
CollectiveProposal, CollectiveProposalContribution, AiGovernancePolicy,
AgentPerformanceRecord + ALTER TABLE agent_proposals
(migration 1744156800; CHECK constraints on trust_level, status,
consensus_status — GAAF compliant)
- Bridge: scripts/llm_bridge.py (llm-connect subprocess seam) +
Application/Helper/AgentBridge.hs (callBridge, callAgent,
checkGovernancePolicy, jsonArrayTexts)
- Routing: Application/Helper/ModelRouter.hs (resolveAgent,
resolveAllAgents) + ModelRoutingPolicies CRUD
- Registry: AgentRegistrations CRUD (Index/Show/New/Edit/Performance),
DeactivateAgentAction, ComputeAgentPerformanceAction
- Delegation: AgentDelegations controller + views, DelegateSubtaskAction
with token budget enforcement at bridge call time
- Collective: CollectiveProposals controller + views,
CreateCollectiveProposalAction (fan-out → synthesis → consensus detection)
- Governance: AiGovernancePolicies CRUD + ToggleAiGovernancePolicyAction;
checkGovernancePolicy enforced at all 4 Phase 5 invocation points
- Phase 5 wiring: replaced callClaudeApi in Widgets, DecisionRecords,
RequirementCandidates with resolveAgent + callAgent + token tracking
- llm-connect feature requests: ~/llm-connect/FEATURE_REQUESTS.md
(FR-1 HTTP serve, FR-2 RoutingPolicy, FR-3 async, FR-4 BudgetTracker)
- GAAF scorecard: 3.61 (up from 3.56); Functional 3.4→3.6, Extensions 3.8→3.9
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:57:17 +00:00
|
|
|
|
|
|
|
|
proposal <- newRecord @CollectiveProposal
|
|
|
|
|
|> set #title title
|
|
|
|
|
|> set #taskType taskType
|
|
|
|
|
|> set #consensusStatus "pending"
|
|
|
|
|
|> set #sourceWidgetId mWidgetId
|
|
|
|
|
|> set #sourceCandidateId mCandId
|
|
|
|
|
|> createRecord
|
|
|
|
|
|
|
|
|
|
agents <- resolveAllAgents hubId taskType
|
2026-04-01 22:48:29 +00:00
|
|
|
|
|
|
|
|
-- FR-3: invoke all agents concurrently in a single bridge subprocess call
|
|
|
|
|
-- instead of sequential forM. Latency now scales with the slowest agent,
|
|
|
|
|
-- not the sum of all agents.
|
|
|
|
|
results <- liftIO $ callAgentsBatch [(a, prompt) | a <- agents]
|
|
|
|
|
|
|
|
|
|
successContribs <- fmap catMaybes $ forM (zip agents results) \(agent, result) ->
|
feat(WP-0012): IHF Phase 11 — Advanced AI Federation
- Schema: AgentRegistration, ModelRoutingPolicy, AgentDelegation,
CollectiveProposal, CollectiveProposalContribution, AiGovernancePolicy,
AgentPerformanceRecord + ALTER TABLE agent_proposals
(migration 1744156800; CHECK constraints on trust_level, status,
consensus_status — GAAF compliant)
- Bridge: scripts/llm_bridge.py (llm-connect subprocess seam) +
Application/Helper/AgentBridge.hs (callBridge, callAgent,
checkGovernancePolicy, jsonArrayTexts)
- Routing: Application/Helper/ModelRouter.hs (resolveAgent,
resolveAllAgents) + ModelRoutingPolicies CRUD
- Registry: AgentRegistrations CRUD (Index/Show/New/Edit/Performance),
DeactivateAgentAction, ComputeAgentPerformanceAction
- Delegation: AgentDelegations controller + views, DelegateSubtaskAction
with token budget enforcement at bridge call time
- Collective: CollectiveProposals controller + views,
CreateCollectiveProposalAction (fan-out → synthesis → consensus detection)
- Governance: AiGovernancePolicies CRUD + ToggleAiGovernancePolicyAction;
checkGovernancePolicy enforced at all 4 Phase 5 invocation points
- Phase 5 wiring: replaced callClaudeApi in Widgets, DecisionRecords,
RequirementCandidates with resolveAgent + callAgent + token tracking
- llm-connect feature requests: ~/llm-connect/FEATURE_REQUESTS.md
(FR-1 HTTP serve, FR-2 RoutingPolicy, FR-3 async, FR-4 BudgetTracker)
- GAAF scorecard: 3.61 (up from 3.56); Functional 3.4→3.6, Extensions 3.8→3.9
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:57:17 +00:00
|
|
|
case result of
|
2026-04-01 22:48:29 +00:00
|
|
|
Left _ -> pure Nothing
|
feat(WP-0012): IHF Phase 11 — Advanced AI Federation
- Schema: AgentRegistration, ModelRoutingPolicy, AgentDelegation,
CollectiveProposal, CollectiveProposalContribution, AiGovernancePolicy,
AgentPerformanceRecord + ALTER TABLE agent_proposals
(migration 1744156800; CHECK constraints on trust_level, status,
consensus_status — GAAF compliant)
- Bridge: scripts/llm_bridge.py (llm-connect subprocess seam) +
Application/Helper/AgentBridge.hs (callBridge, callAgent,
checkGovernancePolicy, jsonArrayTexts)
- Routing: Application/Helper/ModelRouter.hs (resolveAgent,
resolveAllAgents) + ModelRoutingPolicies CRUD
- Registry: AgentRegistrations CRUD (Index/Show/New/Edit/Performance),
DeactivateAgentAction, ComputeAgentPerformanceAction
- Delegation: AgentDelegations controller + views, DelegateSubtaskAction
with token budget enforcement at bridge call time
- Collective: CollectiveProposals controller + views,
CreateCollectiveProposalAction (fan-out → synthesis → consensus detection)
- Governance: AiGovernancePolicies CRUD + ToggleAiGovernancePolicyAction;
checkGovernancePolicy enforced at all 4 Phase 5 invocation points
- Phase 5 wiring: replaced callClaudeApi in Widgets, DecisionRecords,
RequirementCandidates with resolveAgent + callAgent + token tracking
- llm-connect feature requests: ~/llm-connect/FEATURE_REQUESTS.md
(FR-1 HTTP serve, FR-2 RoutingPolicy, FR-3 async, FR-4 BudgetTracker)
- GAAF scorecard: 3.61 (up from 3.56); Functional 3.4→3.6, Extensions 3.8→3.9
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:57:17 +00:00
|
|
|
Right resp -> do
|
|
|
|
|
contrib <- newRecord @CollectiveProposalContribution
|
|
|
|
|
|> set #collectiveProposalId proposal.id
|
|
|
|
|
|> set #agentRegistrationId agent.id
|
|
|
|
|
|> set #content (A.toJSON resp.content)
|
|
|
|
|
|> set #tokensIn (Just resp.tokensIn)
|
|
|
|
|
|> set #tokensOut (Just resp.tokensOut)
|
|
|
|
|
|> set #modelUsed (Just resp.modelUsed)
|
|
|
|
|
|> createRecord
|
|
|
|
|
pure (Just (contrib, resp))
|
|
|
|
|
|
|
|
|
|
consensusStatus <- if null successContribs
|
2026-04-01 22:48:29 +00:00
|
|
|
then do
|
|
|
|
|
proposal |> set #consensusStatus "divergent" |> updateRecord
|
|
|
|
|
pure "divergent"
|
feat(WP-0012): IHF Phase 11 — Advanced AI Federation
- Schema: AgentRegistration, ModelRoutingPolicy, AgentDelegation,
CollectiveProposal, CollectiveProposalContribution, AiGovernancePolicy,
AgentPerformanceRecord + ALTER TABLE agent_proposals
(migration 1744156800; CHECK constraints on trust_level, status,
consensus_status — GAAF compliant)
- Bridge: scripts/llm_bridge.py (llm-connect subprocess seam) +
Application/Helper/AgentBridge.hs (callBridge, callAgent,
checkGovernancePolicy, jsonArrayTexts)
- Routing: Application/Helper/ModelRouter.hs (resolveAgent,
resolveAllAgents) + ModelRoutingPolicies CRUD
- Registry: AgentRegistrations CRUD (Index/Show/New/Edit/Performance),
DeactivateAgentAction, ComputeAgentPerformanceAction
- Delegation: AgentDelegations controller + views, DelegateSubtaskAction
with token budget enforcement at bridge call time
- Collective: CollectiveProposals controller + views,
CreateCollectiveProposalAction (fan-out → synthesis → consensus detection)
- Governance: AiGovernancePolicies CRUD + ToggleAiGovernancePolicyAction;
checkGovernancePolicy enforced at all 4 Phase 5 invocation points
- Phase 5 wiring: replaced callClaudeApi in Widgets, DecisionRecords,
RequirementCandidates with resolveAgent + callAgent + token tracking
- llm-connect feature requests: ~/llm-connect/FEATURE_REQUESTS.md
(FR-1 HTTP serve, FR-2 RoutingPolicy, FR-3 async, FR-4 BudgetTracker)
- GAAF scorecard: 3.61 (up from 3.56); Functional 3.4→3.6, Extensions 3.8→3.9
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:57:17 +00:00
|
|
|
else do
|
|
|
|
|
let contribTexts = map (\(_, r) -> r.content) successContribs
|
|
|
|
|
synthesisPrompt = "The following agents have independently proposed solutions. "
|
|
|
|
|
<> "Synthesize a unified recommendation:\n\n"
|
|
|
|
|
<> intercalate "\n---\n" contribTexts
|
2026-04-01 22:48:29 +00:00
|
|
|
-- Synthesis uses the highest-priority agent (head of the list)
|
|
|
|
|
case agents of
|
|
|
|
|
[] -> do
|
feat(WP-0012): IHF Phase 11 — Advanced AI Federation
- Schema: AgentRegistration, ModelRoutingPolicy, AgentDelegation,
CollectiveProposal, CollectiveProposalContribution, AiGovernancePolicy,
AgentPerformanceRecord + ALTER TABLE agent_proposals
(migration 1744156800; CHECK constraints on trust_level, status,
consensus_status — GAAF compliant)
- Bridge: scripts/llm_bridge.py (llm-connect subprocess seam) +
Application/Helper/AgentBridge.hs (callBridge, callAgent,
checkGovernancePolicy, jsonArrayTexts)
- Routing: Application/Helper/ModelRouter.hs (resolveAgent,
resolveAllAgents) + ModelRoutingPolicies CRUD
- Registry: AgentRegistrations CRUD (Index/Show/New/Edit/Performance),
DeactivateAgentAction, ComputeAgentPerformanceAction
- Delegation: AgentDelegations controller + views, DelegateSubtaskAction
with token budget enforcement at bridge call time
- Collective: CollectiveProposals controller + views,
CreateCollectiveProposalAction (fan-out → synthesis → consensus detection)
- Governance: AiGovernancePolicies CRUD + ToggleAiGovernancePolicyAction;
checkGovernancePolicy enforced at all 4 Phase 5 invocation points
- Phase 5 wiring: replaced callClaudeApi in Widgets, DecisionRecords,
RequirementCandidates with resolveAgent + callAgent + token tracking
- llm-connect feature requests: ~/llm-connect/FEATURE_REQUESTS.md
(FR-1 HTTP serve, FR-2 RoutingPolicy, FR-3 async, FR-4 BudgetTracker)
- GAAF scorecard: 3.61 (up from 3.56); Functional 3.4→3.6, Extensions 3.8→3.9
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:57:17 +00:00
|
|
|
proposal |> set #consensusStatus "divergent" |> updateRecord
|
|
|
|
|
pure "divergent"
|
2026-04-01 22:48:29 +00:00
|
|
|
(synthAgent:_) -> do
|
feat(WP-0012): IHF Phase 11 — Advanced AI Federation
- Schema: AgentRegistration, ModelRoutingPolicy, AgentDelegation,
CollectiveProposal, CollectiveProposalContribution, AiGovernancePolicy,
AgentPerformanceRecord + ALTER TABLE agent_proposals
(migration 1744156800; CHECK constraints on trust_level, status,
consensus_status — GAAF compliant)
- Bridge: scripts/llm_bridge.py (llm-connect subprocess seam) +
Application/Helper/AgentBridge.hs (callBridge, callAgent,
checkGovernancePolicy, jsonArrayTexts)
- Routing: Application/Helper/ModelRouter.hs (resolveAgent,
resolveAllAgents) + ModelRoutingPolicies CRUD
- Registry: AgentRegistrations CRUD (Index/Show/New/Edit/Performance),
DeactivateAgentAction, ComputeAgentPerformanceAction
- Delegation: AgentDelegations controller + views, DelegateSubtaskAction
with token budget enforcement at bridge call time
- Collective: CollectiveProposals controller + views,
CreateCollectiveProposalAction (fan-out → synthesis → consensus detection)
- Governance: AiGovernancePolicies CRUD + ToggleAiGovernancePolicyAction;
checkGovernancePolicy enforced at all 4 Phase 5 invocation points
- Phase 5 wiring: replaced callClaudeApi in Widgets, DecisionRecords,
RequirementCandidates with resolveAgent + callAgent + token tracking
- llm-connect feature requests: ~/llm-connect/FEATURE_REQUESTS.md
(FR-1 HTTP serve, FR-2 RoutingPolicy, FR-3 async, FR-4 BudgetTracker)
- GAAF scorecard: 3.61 (up from 3.56); Functional 3.4→3.6, Extensions 3.8→3.9
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:57:17 +00:00
|
|
|
synthResult <- liftIO $ callAgent synthAgent synthesisPrompt
|
|
|
|
|
case synthResult of
|
|
|
|
|
Left _ -> do
|
|
|
|
|
proposal |> set #consensusStatus "divergent" |> updateRecord
|
|
|
|
|
pure "divergent"
|
|
|
|
|
Right synthResp -> do
|
|
|
|
|
allContribs <- query @CollectiveProposalContribution
|
|
|
|
|
|> filterWhere (#collectiveProposalId, proposal.id)
|
|
|
|
|
|> fetch
|
|
|
|
|
let cs = detectConsensus allContribs
|
|
|
|
|
proposal
|
|
|
|
|
|> set #consensusStatus cs
|
|
|
|
|
|> set #finalContent (Just . A.toJSON $ synthResp.content)
|
|
|
|
|
|> updateRecord
|
|
|
|
|
pure cs
|
|
|
|
|
|
|
|
|
|
setSuccessMessage ("Collective proposal created (" <> consensusStatus <> ")")
|
|
|
|
|
redirectTo ShowCollectiveProposalAction { collectiveProposalId = proposal.id }
|
|
|
|
|
|
2026-04-01 22:48:29 +00:00
|
|
|
-- | Simple consensus heuristic: ≥2 successful contributions = consensus.
|
feat(WP-0012): IHF Phase 11 — Advanced AI Federation
- Schema: AgentRegistration, ModelRoutingPolicy, AgentDelegation,
CollectiveProposal, CollectiveProposalContribution, AiGovernancePolicy,
AgentPerformanceRecord + ALTER TABLE agent_proposals
(migration 1744156800; CHECK constraints on trust_level, status,
consensus_status — GAAF compliant)
- Bridge: scripts/llm_bridge.py (llm-connect subprocess seam) +
Application/Helper/AgentBridge.hs (callBridge, callAgent,
checkGovernancePolicy, jsonArrayTexts)
- Routing: Application/Helper/ModelRouter.hs (resolveAgent,
resolveAllAgents) + ModelRoutingPolicies CRUD
- Registry: AgentRegistrations CRUD (Index/Show/New/Edit/Performance),
DeactivateAgentAction, ComputeAgentPerformanceAction
- Delegation: AgentDelegations controller + views, DelegateSubtaskAction
with token budget enforcement at bridge call time
- Collective: CollectiveProposals controller + views,
CreateCollectiveProposalAction (fan-out → synthesis → consensus detection)
- Governance: AiGovernancePolicies CRUD + ToggleAiGovernancePolicyAction;
checkGovernancePolicy enforced at all 4 Phase 5 invocation points
- Phase 5 wiring: replaced callClaudeApi in Widgets, DecisionRecords,
RequirementCandidates with resolveAgent + callAgent + token tracking
- llm-connect feature requests: ~/llm-connect/FEATURE_REQUESTS.md
(FR-1 HTTP serve, FR-2 RoutingPolicy, FR-3 async, FR-4 BudgetTracker)
- GAAF scorecard: 3.61 (up from 3.56); Functional 3.4→3.6, Extensions 3.8→3.9
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:57:17 +00:00
|
|
|
detectConsensus :: [CollectiveProposalContribution] -> Text
|
|
|
|
|
detectConsensus contribs
|
|
|
|
|
| length contribs >= 2 = "consensus"
|
|
|
|
|
| otherwise = "pending"
|