Repository navigation
G6: grant gate for effectful workflow tasks (#59) - #65
aien-spark wants to merge 2 commits into
Conversation
Wrapper around an effectful task body: check the desk grant against the request's objective id and cause id, prepare, check again, then apply. No grant waits for approval; unbound, forged, stale, foreign objective, foreign cause and desk-unreachable are named no-effect refusals. The gate never spends the grant. Fake desk only; no sovereign-core client. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
⚖️ Sovereign Code Review & Alignment GateGreetings @aien-spark. I am AIEN, the automated review gate for the AIENOS project. Your pull request #65 ("G6: grant gate for effectful workflow tasks (#59)") has undergone automated auditing against the project standards. ✅ Doctrine Diff Audit: PASS
🌿 Sovereign Steward: Contributor Alignment InterviewGreetings @aien-spark. I am AIEN, the automated steward for the AIENOS project. We welcome all contributors who share our commitment to open collaboration, global humanity, and disciplined systems craftsmanship. We build to expand computing capability, advance open-source intelligence, and share technology freely with the world. Your pull request #65 ("G6: grant gate for effectful workflow tasks (#59)") is ready for stewardship alignment. Please respond directly to these four alignment inquiries:
Reply to this comment with your affirmation. Once verified against the project standards, I will grant the |
Closes #59
Lane G, issue G6: an effectful task starts only under a real, bound approval from the Spark desk. Stacked on #64 (G5), base
lane-g/g5-progress-mapping.Tested commit:
4808265(content142ff4c). Gates ran againstaien-protocolsmain4b76f7f.What is here
src/orchestration/grant_gate.rs:GrantDesktrait,GrantBinding(objective id, cause id, grant id),check,EffectBody(prepare, then apply),GrantGate(aTaskRunner: check, prepare, check again, apply), namedGrantRefusals.tests/workflow_grant_gate_tests.rs: 11 tests with a fake desk, including the four frozen refusals and a run through the workflow executor.docs/WORKFLOW-DAG.md: one section on the gate.Decisions (made here, with reasons)
ApprovalPending(the task waits for a human), not a failure. This matches G3, where a task needing a grant rebuilds as WaitingForApproval. Every other refusal is aRejected, no-effect failure whose message starts with the refusal name; an unreachable desk isUnavailable, no effect.GRANT_GATE_UNBOUND) so empty never matches empty.Checks
g6_no_grant_waits_for_approval_and_runs_nothing,g6_foreign_cause_grant_is_refused,g6_unbound_binding_is_refused_even_if_the_desk_matches, negative controlg6_bound_available_grant_runs_the_effect_once)g6_stale_grant_is_refusedfor spent, expired, revoked;g6_foreign_objective_grant_is_refused;g6_forged_grant_id_is_refused;g6_refusal_names)g6_grant_revoked_during_prepare_stops_the_effect)g6_gate_inside_a_workflow: no grant gives WaitingForApproval with the dependent Pending; forged gives Failed with the dependent Skipped; zero effects)g6_grant_revoked_during_prepare_stops_the_effectFAILEDg6_foreign_objective_grant_is_refusedFAILEDcrumb verify .OK: 13 crumbs current)Remaining gap
Items 3 and 4; the action digest that a
waiting_for_approvalmessage (G5) needs comes from the same desk.Next dependency
aien-sovereign-core-mv#379 (durable grants, desk reachable), aien-protocols-mv#33 (INTERPLANE canonical request), then lane H.
🤖 Generated with Claude Code