Skip to content

docs: remove committed working specs and plans - #5060

Merged
QuantumExplorer merged 3 commits into
v4.2-devfrom
claude/remove-committed-working-specs
Sep 27, 2026
Merged

QuantumExplorer merged 3 commits into
v4.2-devfrom
claude/remove-committed-working-specs

Conversation

@QuantumExplorer

@QuantumExplorer QuantumExplorer commented Sep 27, 2026 •

Copy link
Copy Markdown
Member

Basic explanation

What this does: deletes 24 planning documents that were committed to the repository: implementation specs, "known leftovers" lists, a code-review log and a PR hardening plan for DashPay and the Kotlin/Swift SDKs (20 files under docs/), plus three platform-wallet plans and a SwiftExampleApp timing spec. The project's rule (in CLAUDE.md) is that such documents guide the work but are never committed, because they go stale as soon as the code lands; anything worth keeping goes in code comments, tests, commit messages or the PR description.

Before deleting them, every document was read against the current code. Most of what they said is already documented where the code lives, and in several places the plan was wrong and the code right. The facts that existed nowhere else now sit next to the code they explain.

Example:

  • Before: the reason a DashPay contact has one payment channel even though DIP-15 allows several accounts was written only in docs/dashpay/MULTI_ACCOUNT_SPEC.md.
  • After: it is on newest_received_per_sender, the function that enforces it.

Value: the repository stops carrying about 16,000 lines of partly stale plans that readers could mistake for current documentation, without losing the reasoning in them.

Risks: Low. Only comments, docs and one test-plan table change; no code. The history keeps every deleted file.

Issue being fixed or feature implemented

CLAUDE.md, "Specs are working artifacts: never commit them": "Delete it once the task ships. If a branch already committed one, git rm --cached <path> before merge." A review of 4.1 and 4.2 found these committed. Their headers identify them as working documents, for example SPEC.md ("A single working spec for getting the full DashPay flow done"), KOTLIN_MIGRATION_LEFTOVERS.md ("Kept so nothing is silently lost when the four stacked PRs collapse into one"), CODE_REVIEW_NOTES.md ("Final multi-agent code review"), rs-platform-wallet/PLAN.md (status: active).

What was done?

Removed:

  • docs/dashpay/{BLOCK_SPEC, CONTACTINFO_FORMAT_SPEC, DASHPAY_STATE_ENCAPSULATION_SPEC, DIP15_INVITATIONS_SPEC, DIP_CONFORMANCE_GAPS, IDENTITY_KEY_SCALAR_ELIMINATION_SPEC, KOTLIN_INVITATIONS_SPEC, KOTLIN_MIGRATION_FOLLOWUPS_SPEC, KOTLIN_MIGRATION_LEFTOVERS, KOTLIN_MIGRATION_SPEC, MULTI_ACCOUNT_SPEC, PENDING_CONTACT_CRYPTO_RELOCATION_SPEC, QA_TESTCASES_SPEC, QR_AUTO_ACCEPT_SPEC, SIGNER_SEED_ELIMINATION_SPEC, SPEC, SYNC_CORRECTNESS_SPEC}.md
  • docs/sdk/{CODE_REVIEW_NOTES, KOTLIN_SWIFT_SHARED_PARITY_SPEC, PR3999_WALLET_LIFECYCLE_HARDENING_SPEC}.md
  • packages/rs-platform-wallet/{PLAN, PERSISTENCE_REDESIGN}.md, packages/rs-platform-wallet/docs/DASHPAY_MIGRATION_PLAN.md
  • packages/swift-sdk/SwiftExampleApp/docs/shielded-sync-timing-spec.md

Kept: docs/dashpay/INTEROP_DESK_CHECK.md, which says it is kept on purpose as the evidence for the DashPay wire-format decisions. It gains a dated addendum (#4372 now accepts legacy key purposes on receive) and the reference-client source anchors from the deleted conformance-gaps file.

Facts moved next to the code:

Fact Now on
Invitation threat model: who can steal or deny a claim, unsigned link, inviter knows the future identity id, OneLink leaks the key crypto/invitation.rs # Security
Why multi-account contacts stay deferred newest_received_per_sender (whose doc also moves back onto it from above SYNC_OVERLAP_MS)
Ignore stays local; a cross-device ignore must be one self-encrypted list, not contactInfo ignore_contact_sender, DashPay contract README
Count proofs are public, so a countable [toUserId, $ownerId] index would publish who contacted whom book, Document Count Trees
Profile sync privacy cost; why it refetches by time window sync_contact_profiles
Avatar fingerprints compare by Hamming distance only calculate_dhash_fingerprint
When the legacy Keychain signer fallback may be removed KeychainSigner.signOnDemand
What the iOS Keychain protection does and does not guarantee; why the two signer handles stay separate WalletStorage, swift-sdk/CLAUDE.md
Parity manifest rules, native-binding test limits, Compose handle rule kotlin-sdk/CLAUDE.md
Room's power-loss residual DashDatabase.create
Two manual device checks Android TEST_PLAN.md (ID-01 note, new ID-17)
Why WalletManager has no per-wallet locks WalletEvent adapter (core_bridge.rs)
Why tokens need a watch list IdentitySyncManager
DashPay contact pools use key-wallet's gap of 20, not DIP-15's 10 DEFAULT_CONTACT_GAP_LIMIT
Meaning of each IdentityStatus variant, and which the library sets IdentityStatus
Why the shielded sync timer uses Swift Date() at both edges ShieldedService

Other doc fixes in touched files: apply_changeset's docs said it replays cs.core; it drops it (so ApplyError::CoreApply is never built). TokenWallet mentions removed. Plan labels ("Phase 9a-4", "evo-tool task #130") removed from comments. The shielded cold-sync figure is about 20 minutes for 1M notes, not 10. Pointers to deleted files are removed from auto_accept.rs (the TTL comment now states its security reasoning), invitation.rs, two Kotlin instrumentation tests, both test plans, the Swift timing comments and the kotlin-sdk-build.yml path filter.

Open work that only these documents recorded is filed as issues (linked in a comment below).

How Has This Been Tested?

Comment, Markdown and test-plan changes only. cargo check -p platform-wallet (first commit); rustfmt --check on every touched Rust file; python3 scripts/check_sdk_parity_manifest.py passes; git grep finds no remaining reference to a deleted file outside CHANGELOG.md history.

Breaking Changes

None.

Checklist:

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated relevant unit/integration/functional/e2e tests
  • I have added "!" to the title and described breaking changes in the corresponding section if my code contains any
  • I have made corresponding changes to the documentation if needed
  • If I added or changed GroveDB structure, I described it in the area's structure.rs, regenerated grovedb-structure.json, and checked the structure viewer link posted on this pull request

For repository code-owners and collaborators only

  • I have assigned this pull request to a milestone

🤖 Generated with Claude Code

PR Hygiene · f0a37f8

  • Bots — coderabbitai not yet · thepastaclaw not yet — /skip-bots proceeds without the ones not yet reported
  • Self-review — post /self-reviewed once the bots are done
  • Within your 5 open PRs — this one is beyond the limit; it waits until one merges
  • Build running
  • Approvals
    • files with no dedicated owner — you own it
    • system-contracts — you own it
    • kotlin-sdk (packages/kotlin-sdk/CLAUDE.md, packages/kotlin-sdk/KotlinExampleApp/TEST_PLAN.md, packages/kotlin-sdk/sdk/src/androidTest/kotlin/org/dashfoundation/dashsdk/wallet/DashPayUnlockAndSyncTest.kt and 2 more) — HashEngineering
    • rs-platform-wallet (packages/rs-platform-wallet/PERSISTENCE_REDESIGN.md, packages/rs-platform-wallet/PLAN.md, packages/rs-platform-wallet/docs/DASHPAY_MIGRATION_PLAN.md and 13 more) — HashEngineering or ZocoLini or llbartekll or romchornyi
    • swift-sdk (packages/swift-sdk/CLAUDE.md, packages/swift-sdk/Sources/SwiftDashSDK/Core/Wallet/WalletStorage.swift, packages/swift-sdk/Sources/SwiftDashSDK/FFI/KeychainSigner.swift and 3 more) — llbartekll or romchornyi

When every box is checked the PR Hygiene check passes and this can merge.

CLAUDE.md: a spec, plan or design doc written to drive a change is a
working artifact that is never committed, and one that was committed is
removed. Twenty such files were committed in July (implementation specs,
migration leftovers, a code review log, a PR hardening plan). Remove them;
the one fact code comments still pointed at (why a private key in an
auto-accept QR is acceptable) moves into the comment, the other pointers
are dropped, and the Kotlin workflow no longer watches a deleted path.
INTEROP_DESK_CHECK.md stays: it records why it is kept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

Next included review available in 45 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Repository: dashpay/platform/.coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: 4b35457f-f316-400d-b762-4f750fc2ce3f

📥 Commits

Reviewing files that changed from the base of the PR and between 4d4f38d and f0a37f8.

📒 Files selected for processing (51)
  • .github/workflows/kotlin-sdk-build.yml
  • book/src/drive/document-count-trees.md
  • docs/dashpay/BLOCK_SPEC.md
  • docs/dashpay/CONTACTINFO_FORMAT_SPEC.md
  • docs/dashpay/DASHPAY_STATE_ENCAPSULATION_SPEC.md
  • docs/dashpay/DIP15_INVITATIONS_SPEC.md
  • docs/dashpay/DIP_CONFORMANCE_GAPS.md
  • docs/dashpay/IDENTITY_KEY_SCALAR_ELIMINATION_SPEC.md
  • docs/dashpay/INTEROP_DESK_CHECK.md
  • docs/dashpay/KOTLIN_INVITATIONS_SPEC.md
  • docs/dashpay/KOTLIN_MIGRATION_FOLLOWUPS_SPEC.md
  • docs/dashpay/KOTLIN_MIGRATION_LEFTOVERS.md
  • docs/dashpay/KOTLIN_MIGRATION_SPEC.md
  • docs/dashpay/MULTI_ACCOUNT_SPEC.md
  • docs/dashpay/PENDING_CONTACT_CRYPTO_RELOCATION_SPEC.md
  • docs/dashpay/QA_TESTCASES_SPEC.md
  • docs/dashpay/QR_AUTO_ACCEPT_SPEC.md
  • docs/dashpay/SIGNER_SEED_ELIMINATION_SPEC.md
  • docs/dashpay/SPEC.md
  • docs/dashpay/SYNC_CORRECTNESS_SPEC.md
  • docs/sdk/CODE_REVIEW_NOTES.md
  • docs/sdk/KOTLIN_SWIFT_SHARED_PARITY_SPEC.md
  • docs/sdk/PR3999_WALLET_LIFECYCLE_HARDENING_SPEC.md
  • packages/dashpay-contract/README.md
  • packages/kotlin-sdk/CLAUDE.md
  • packages/kotlin-sdk/KotlinExampleApp/TEST_PLAN.md
  • packages/kotlin-sdk/sdk/src/androidTest/kotlin/org/dashfoundation/dashsdk/wallet/DashPayUnlockAndSyncTest.kt
  • packages/kotlin-sdk/sdk/src/androidTest/kotlin/org/dashfoundation/dashsdk/wallet/WalletManagerRoundTripTest.kt
  • packages/kotlin-sdk/sdk/src/main/kotlin/org/dashfoundation/dashsdk/persistence/DashDatabase.kt
  • packages/rs-platform-wallet/PERSISTENCE_REDESIGN.md
  • packages/rs-platform-wallet/PLAN.md
  • packages/rs-platform-wallet/docs/DASHPAY_MIGRATION_PLAN.md
  • packages/rs-platform-wallet/src/changeset/core_bridge.rs
  • packages/rs-platform-wallet/src/changeset/traits.rs
  • packages/rs-platform-wallet/src/manager/identity_sync.rs
  • packages/rs-platform-wallet/src/wallet/apply.rs
  • packages/rs-platform-wallet/src/wallet/identity/crypto/auto_accept.rs
  • packages/rs-platform-wallet/src/wallet/identity/crypto/dip14.rs
  • packages/rs-platform-wallet/src/wallet/identity/crypto/invitation.rs
  • packages/rs-platform-wallet/src/wallet/identity/network/contact_requests.rs
  • packages/rs-platform-wallet/src/wallet/identity/network/invitation.rs
  • packages/rs-platform-wallet/src/wallet/identity/network/payments.rs
  • packages/rs-platform-wallet/src/wallet/identity/network/profile.rs
  • packages/rs-platform-wallet/src/wallet/identity/types/dashpay/profile.rs
  • packages/rs-platform-wallet/src/wallet/identity/types/key_storage.rs
  • packages/swift-sdk/CLAUDE.md
  • packages/swift-sdk/Sources/SwiftDashSDK/Core/Wallet/WalletStorage.swift
  • packages/swift-sdk/Sources/SwiftDashSDK/FFI/KeychainSigner.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Core/Services/ShieldedService.swift
  • packages/swift-sdk/SwiftExampleApp/SwiftExampleApp/Core/Views/CoreContentView.swift
  • packages/swift-sdk/SwiftExampleApp/docs/shielded-sync-timing-spec.md

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added this to the v4.2.0 milestone Sep 27, 2026
@github-actions github-actions Bot added the waiting-bots Waiting for the review bots to report on this head label Sep 27, 2026
@thepastaclaw

thepastaclaw commented Sep 27, 2026 •

Copy link
Copy Markdown
Collaborator

🕓 Queued for automated review — 1st in line, estimated start in ~10 min (commit f0a37f8)
Estimated review time once started: ~1.1 h (two-phase automated review; median of recent runs).

  • Request priority review — click to move this review to the front of the queue.

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Final review — Phase 1 only (trivial change)

Verified the supplied preliminary review evidence against head cbf718d. The change deletes 20 working documents, removes their references, and preserves the QR auto-accept security rationale in its code comment; the remaining edits affect documentation, comments, and a workflow path filter, not executable logic. No in-scope findings were identified; this assessment does not claim final combined reviewer coverage.

Review provenance

Source: reviewer 1: glm-5.3-flash (agent: phase1-reviewer, role: general); reviewer 2: glm-5.3-flash (agent: phase1-reviewer, role: architecture-layering); final verifier: gpt-6-astra (agent: astra-gate-verifier, role: final-verifier)

  • Triage: trivial by gpt-6-astra (effort low) — The diff removes working documentation, updates comments and references, and drops a deleted document from a CI path filter without changing executable logic, tests, cryptography, or key handling.
  • Phase 1 reviewers: glm-5.3-flash — general (completed, effort high); agent phase1-reviewer, glm-5.3-flash — architecture-layering (completed, effort high); agent phase1-reviewer
  • Phase 1 model: glm-5.3-flash — zai quota: 5h 84% left, weekly 31% left; passed over gemini-3.8-flash-high (antigravity below 15% reserve: weekly 13% left, 5h 100% left)
  • Fresh verifier: gpt-6-astra — final-verifier; agent astra-gate-verifier
  • Phase 2 reviewers: not run (triage rated this change trivial); this review comments and never approves

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Bots are done — your move: post /self-reviewed.
Full checklist in the description.

@github-actions github-actions Bot added waiting-self-review Waiting for the author to post /self-reviewed bot-review-skipped A required review bot did not report; it was skipped by the window or by a person. and removed waiting-bots Waiting for the review bots to report on this head labels Sep 27, 2026
QuantumExplorer and others added 2 commits September 28, 2026 06:04
The specs removed in the previous commit held rationale that existed
nowhere else. It now sits next to the code it explains:

- invitation threat model on the invitation codec
- why multi-account contacts stay deferred on newest_received_per_sender
  (and that function's doc, which sat above SYNC_OVERLAP_MS, moves back
  onto it)
- ignore stays local, and how a cross-device ignore must work, on
  ignore_contact_sender and the DashPay contract README
- count proofs are public, in the book's count-tree chapter
- profile sync privacy cost and why it refetches by time window
- avatar fingerprints compare by Hamming distance
- when the legacy Keychain signer fallback may be removed
- what the iOS Keychain protection does and does not guarantee, and why
  the two signer handles stay separate
- Kotlin parity manifest rules, native-binding test limits, and the
  Compose handle rule in the Kotlin CLAUDE.md
- Room's power-loss residual on DashDatabase.create
- two manual QA checks in the Android test plan
- a dated addendum and the reference-client anchors in the interop
  desk check

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
packages/rs-platform-wallet/PLAN.md, PERSISTENCE_REDESIGN.md,
docs/DASHPAY_MIGRATION_PLAN.md and the SwiftExampleApp
shielded-sync-timing spec were working plans. Their designs shipped or
were replaced, and the code now documents itself in more detail. The few
facts found nowhere else move next to the code:

- why WalletManager has no per-wallet locks (a 7x SPV slowdown), on the
  WalletEvent adapter
- why tokens need a watch list (no query lists an identity's tokens), on
  IdentitySyncManager
- DashPay contact pools use key-wallet's gap of 20, not DIP-15's 10, on
  DEFAULT_CONTACT_GAP_LIMIT
- what each IdentityStatus variant means and which the library sets
- why the shielded sync timer uses Swift Date() at both edges

Comments that pointed at the plans lose the pointer or the plan label,
and docs that contradicted the code are corrected: apply_changeset drops
cs.core rather than replaying it (so ApplyError::CoreApply is never
built), TokenWallet no longer exists, and a cold shielded sync of 1M
notes takes about 20 minutes, not 10.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

📖 Book Preview built successfully.

Download the preview from the workflow artifacts.
To view locally: download the artifact, unzip, and open index.html.

Updated at 2026-09-27T23:05:04.047Z

@QuantumExplorer

Copy link
Copy Markdown
Member Author

Open work that only the removed documents recorded is now filed:

A live doc bug found the same way, the book's contact-request guide encrypting a 78-byte xpub instead of the 69-byte compact form, is fixed in #5087.

@QuantumExplorer
QuantumExplorer merged commit d38592f into v4.2-dev Sep 27, 2026
39 of 40 checks passed
@QuantumExplorer
QuantumExplorer deleted the claude/remove-committed-working-specs branch September 27, 2026 23:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

waiting-bots Waiting for the review bots to report on this head

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants