You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(operation): reject stale executor revisions before durable proposal and preserve delivery blockers #4366
A live, simulation-only Goal Channel qualification exposed two control-plane gaps before any real finance execution:
prepare-operation --execute accepts and persists a proposal whose requested executor revision does not match the active extension revision. deliver-operation rejects it later, leaving an unreachable gated proposal without a card.
The Goal Channel CLI catches stage-specific ValueErrors and projects them as broad invalid_configuration / provider_api_failed blockers. In the same run, an actual Feishu Card 2.0 schema rejection (API 200621) was not distinguishable from binding drift, identity failure, or history-read failure.
This is domain-neutral operation lifecycle and receipt behavior. It must not special-case finance or Lark card fields.
Acceptance
prepare-operation resolves the declared executor capability/protocol/permission and checks the active revision in preview and execute modes before writing a durable proposal.
A revision mismatch returns a stable typed blocker and writes no proposal/idempotency entry.
deliver-operation preserves typed, public-safe failure stages for executor drift, sender identity verification, dedupe history read, provider rejection, and exact readback failure.
Receipts do not claim external_write_performed=false when the provider outcome is actually unknown; known-locator recovery remains owned by the existing M3 slice.
Repeated calls remain idempotent and do not create duplicate cards or rerun an executor.
Tests cover stale revision before persistence, provider schema rejection before locator, known locator/readback failure handoff, and public-safe error projection.
Scope boundary
Do not fold in Todo/lease semantics, provider promotion, unknown-locator resend policy, or any finance-specific execution authority. LIHUA919 continues to own the independent M3 known-locator readback/receipt recovery slice.
Additional live acceptance evidence (simulation-only, no broker/order/signing/transfer authority):
With the Card 2.0 serializer fixed, deliver-operation --execute returned external_write_performed=true, readback_verified=false, blocker readback_unverified.
A read-only history request using the configured bot identity failed with Feishu code 230002 because that bot is not a member of the target chat.
A read-only history request using the already-authorized user identity succeeded and found the sole application-sent interactive card at the delivery time with the exact visible simulation request and confirmation boundary.
Therefore the original message exists and must not be resent. The current receipt is fail-closed but loses the actionable identity/stage distinction needed to route known-locator recovery.
Please include this counterexample in acceptance: sender identity may successfully create a card while the default readback identity cannot read that same chat. The typed delivery blocker/receipt should preserve sender identity, readback identity, provider stage, whether a locator is known, and external_write_performed=true; then hand a known locator to the existing LIHUA919 M3 read-only recovery slice. Do not rerun the worker/model or create a replacement card.
Activity
huangruiteng commentedon Sep 14, 2026
Additional live acceptance evidence (simulation-only, no broker/order/signing/transfer authority):
deliver-operation --executereturnedexternal_write_performed=true,readback_verified=false, blockerreadback_unverified.230002because that bot is not a member of the target chat.Please include this counterexample in acceptance: sender identity may successfully create a card while the default readback identity cannot read that same chat. The typed delivery blocker/receipt should preserve sender identity, readback identity, provider stage, whether a locator is known, and
external_write_performed=true; then hand a known locator to the existing LIHUA919 M3 read-only recovery slice. Do not rerun the worker/model or create a replacement card.fix(operation): reject stale executor revisions pre-persist and keep …