Skip to content

Gate 3: Wallet signer BTC operations#22

Merged
geraldarthurdavis merged 1 commit into
version/v29from
v29/gate-3-wallet-signer-btc-operations
May 20, 2026
Merged

Gate 3: Wallet signer BTC operations#22
geraldarthurdavis merged 1 commit into
version/v29from
v29/gate-3-wallet-signer-btc-operations

Conversation

@geraldarthurdavis

Copy link
Copy Markdown
Contributor

Summary

  • define BTD-owned BTC fee quote lifecycle, signer-session recovery, blocked-readiness receipts, and operation posture
  • expose JSON-safe BTC fee operation posture from the BTC fee route
  • add a source-safe Terminal Wallet/BTC transaction detail section and projection tests
  • document Gate 3 in the V29 spec family and wire the gate checker into CI

Validation

  • pnpm run check:v29-gate3
  • node scripts/check-v29-gate1-objectives-and-gating.mjs --skip-branch-check
  • node scripts/check-v29-gate2-terminal-transaction-read-models.mjs --skip-branch-check
  • node scripts/check-bitcode-spec-family.mjs --version V29 --mode draft --current-target V28
  • node scripts/check-bitcode-spec-family.mjs --version V28 --mode promoted --current-target V28
  • node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V28 --draft-target V29
  • node scripts/check-bitcode-canonical-inputs.mjs --current-target V28
  • pnpm --filter @bitcode/btd test
  • pnpm --filter @bitcode/btd typecheck
  • pnpm --filter @bitcode/api exec tsc --noEmit --pretty false
  • pnpm --dir uapi exec tsc --noEmit --pretty false
  • pnpm --dir uapi exec eslint . --ext .ts,.tsx --quiet
  • pnpm --dir uapi exec jest --runTestsByPath tests/terminalTransactionQuery.test.ts tests/terminalTransactionReadModel.test.ts tests/terminalWalletBtcOperation.test.ts tests/terminalTransactionDetail.test.ts tests/terminalTransactionDetailCards.test.tsx tests/terminalTransactionDetailSnapshot.test.ts tests/terminalJournalReconciliation.test.ts --runInBand
  • bash scripts/find-uppercase-raw-promptparts.sh && bash scripts/check-import-casing.sh
  • pnpm --filter @bitcode/pipeline-asset-pack typecheck && pnpm --filter @bitcode/pipeline-hosts typecheck
  • pnpm --filter @bitcode/pipeline-asset-pack exec jest --config jest.config.cjs --passWithNoTests --forceExit && pnpm --filter @bitcode/pipeline-hosts exec jest --config jest.config.cjs --passWithNoTests --forceExit
  • pnpm test:qa:v28:pipeline-readback
  • npm --prefix protocol-demonstration test && npm --prefix protocol-demonstration run test:v28-mvp-qa
  • git diff --check
  • node scripts/check-bitcode-pre-commit.mjs

Close V29 Gate 3 with BTD-owned BTC fee quote lifecycle, signer-session recovery, blocked-readiness receipts, and operation posture.

Expose operation posture through the BTC fee route and add a source-safe Terminal Wallet/BTC detail section with focused package, route, UI, spec, and gate-quality coverage.
@vercel

vercel Bot commented May 20, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
engi-uapi Ready Ready Preview, Comment May 20, 2026 4:41pm

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d026802851

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +370 to +374
if (!signerRecovery.canSign) {
return blockedPosture({
quote,
receipt,
signerRecovery,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve receipt finality when signer session is absent

buildBtcFeeOperationPosture short-circuits to blocked whenever signerRecovery.canSign is false, before it considers an existing receipt. In this commit, buildBtdBtcFeeTransactionSettlement now always emits operationPosture, but non-prepare actions (mark_signed/mark_broadcast/observe) do not require a live payerSession, so settled receipts can be reported as blocked purely because the session is missing or expired. That misclassifies already-broadcast/confirmed transactions and can hide true finality state in downstream UI/read models.

Useful? React with 👍 / 👎.

Comment on lines +67 to +71
normalized === 'blocked' ||
normalized === 'not_prepared' ||
normalized === 'quote_pending'
) {
return normalized === 'prepared' ? 'psbt_ready' : normalized;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Map quoted operation phase instead of downgrading to quote_pending

The terminal projection normalizer does not accept the backend operationPosture.phase value quoted, so accepted-quote/no-receipt posture falls through and is displayed as quote_pending. In this commit, backend posture explicitly uses phase: 'quoted' for a ready-to-prepare state, so this omission causes the Wallet/BTC card summary/state to regress from “ready for PSBT preparation” to “quote still needed.”

Useful? React with 👍 / 👎.

@geraldarthurdavis
geraldarthurdavis merged commit 94abf30 into version/v29 May 20, 2026
30 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant