feat(openspec): bootstrap behavioral specifications for various product domains#6958
Open
Parsh wants to merge 35 commits into
Open
feat(openspec): bootstrap behavioral specifications for various product domains#6958Parsh wants to merge 35 commits into
Parsh wants to merge 35 commits into
Conversation
…e, requirements, and scenarios
…, requirements, and scenarios
…ents, and scenarios
…ion lifecycle, requirements, and scenarios
…action display, requirements, and scenarios
…y, control, and transaction handling
…phrase management, server backups, and cloud integration
…dence, methods, status history, and recovery phrase checks
…n, timelock configurations, and planning tools
…t setup, key sharing, and session synchronization
…ent, billing intervals, and in-app purchase processes
…on, Tor routing, Bitcoin network selection, display currency, unit display, theme, language, login method, wallet management, and multi-user accounts
…ion, token registration, UAI stack management, and notification handling
…ket creation, and support interactions
…, purchase flow, wallet selection, and swap functionality
…eation, import, transaction handling, and settings
cakesoft-shashank
requested changes
May 12, 2026
…gy and requirements
…llet' terminology and clarify acceptance criteria
… 'wallet' terminology and clarify acceptance criteria
…h 'wallet' terminology and clarify acceptance criteria
…' terminology and clarify acceptance criteria
…llet' terminology and clarify acceptance criteria
…allet' terminology and clarify acceptance criteria
…onation processes, and remove subscription tier references
… item' terminology and clarify user-facing copy
…covery Key terminology, and enhance user warnings
…' with 'Recovery Key', clarify terminology, and enhance user guidance
…ce 'vault' with 'wallet', and correct legacy enum typos
…e active scope items, and clarify historical content
…active scope items, and clarify historical content
… from Buy-Bitcoin specification
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR introduces the complete OpenSpec baseline for Bitcoin Keeper, 17 behavioral
specification files that collectively describe what the app currently does, written as
observable, implementation-agnostic requirements and Given/When/Then scenarios.
These specs document the system as it exists today. Every future change to the app will
be expressed as a delta on top of this baseline, making the specs the durable source of
truth for product behavior.
What's included
Each file lives at
openspec/specs/<domain>/spec.mdand follows the canonical templatedefined in the bootstrap plan.
authentication— App unlock, PIN setup, biometric fallback, deep link handlingwallets— Single-sig wallet creation, import, sync, visibility, script typessigning-devices— Hardware, software, and assisted key lifecyclevault— Multi-sig creation, quorum policy, Miniscript types, migration, archivingsend-and-receive— PSBT lifecycle, multi-device signing, broadcast, receive addressestransaction-history— Transaction list, detail view, labels, caching, unconfirmed stateutxo-management— Coin control, UTXO labeling/freezing, manual selection, label import/exportbackup-and-recovery— Seed backup/confirmation, cloud backup, app image recovery, relay synchealth-checks— Signer health check flows, status tracking, UAI promptsinheritance— Timelocked vaults, emergency/reserve keys, timelock reset, PDF exportcollaborative-wallet— Multi-party key exchange, coordinator session, vault completionsubscription— Tier gating, plan display, IAP, receipt verification, discount codessettings— Node config, Tor, network switching, currency/units/theme/languagenotifications— FCM registration, UAI stack, dismissal, per-type alert behaviorconcierge— Zendesk-backed support tickets, comments, account manager panelbuy-bitcoin— Third-party purchase entry point, address pre-fill, WebView flowusdt— USDT wallet create/send/receive, history, exchange rates, separation from BTC walletsWhat these specs are (and aren't)
Are: Observable, user-facing behavior statements using RFC 2119 keywords (MUST/SHOULD/MAY).
Every requirement has at least one happy-path scenario and one failure or edge-case scenario.
Tier-gating requirements explicitly name the minimum subscription tier.
Are not: Architecture decisions, library choices, Redux action names, class structures,
or anything that belongs in a
design.mdortasks.md. If you spot implementation detailin a spec, that's a review finding.
Authoring approach
Specs were written in dependency order:
authenticationfirst (unblocks everything), thenwalletsandsigning-devicesin parallel, then composite domains after their dependencieswere reviewed.
High-risk domains (
send-and-receive,backup-and-recovery,vault) received fuller scenariocoverage. Lower-risk domains (
buy-bitcoin,concierge,usdt) are intentionally lightweight.How to review
Focus on behavioral completeness and correctness — not style. For each spec ask:
state that a user cannot observe?
Given/When/Then block without additional context?