fix: improve gift code flow - #689

Merged
jvsena42 merged 7 commits into
masterfrom
claude/issue-680-20260120-1548
Jan 26, 2026
Merged

fix: improve gift code flow#689
jvsena42 merged 7 commits into
masterfrom
claude/issue-680-20260120-1548

Conversation

@ovitrif

@ovitrifovitrif commented Jan 20, 2026

Copy link
Copy Markdown
Collaborator

Fixes#680

Improves the UX of the Easter Egg gift code redemption flow by adding better logging, error handling, and validation.

Description

  • Add comprehensive logging throughout gift claim operations for better debugging
  • Fix amount=0 handling to allow backend validation instead of rejecting upfront
  • Improve error messages with full error chain context
  • Add operation guards to prevent duplicate claim attempts
  • Validate that channel funding transaction exists
  • Better error classification (Used/UsedUp/Error)

QA Notes

Test scenarios:

  1. Test with a valid gift code (happy path)
  2. Test with a gift code that has amount=0 in QR
  3. Test with an already-used gift code
  4. Test with an exhausted/depleted gift code
  5. Test in both liquidity scenarios (with/without existing channels)
  6. Monitor logs to verify detailed debug information is captured

@ovitrifovitrif changed the title fix: improve gift code redemption flowfix: improve gift code flowJan 20, 2026

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

@claude Address my PR review comments.

Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
@claude

This comment has been minimized.

@ovitrifovitrif assigned ovitrif and unassigned ovitrifJan 22, 2026
@piotr-iohk
piotr-iohkforce-pushed the claude/issue-680-20260120-1548 branch from 176e902 to 37093aeCompareJanuary 26, 2026 07:59
@piotr-iohk
piotr-iohk marked this pull request as ready for review January 26, 2026 09:26
@jvsena42

Copy link
Copy Markdown
Member

@piotr-iohk It would be nice adding E2E tests in the future. there are some bash commands to simulate the gift code

@ovitrif
ovitrifforce-pushed the claude/issue-680-20260120-1548 branch from fa1f3b0 to 4450f23CompareJanuary 26, 2026 10:11
@jvsena42

Copy link
Copy Markdown
Member

gift codes here
#473

@ovitrif
ovitrifforce-pushed the claude/issue-680-20260120-1548 branch from 4450f23 to 93596f0CompareJanuary 26, 2026 10:15
github-actionsBotand others added 5 commits January 26, 2026 11:28
- Add comprehensive logging for gift claim operations
- Fix amount=0 handling to proceed with backend validation
- Improve error messages with full error chain context
- Add operation guards to prevent duplicate claims
- Validate channel funding transaction exists
- Better error classification (Used/UsedUp/Error)
Co-authored-by: Ovi Trif <ovitrif@users.noreply.github.com>
Co-authored-by: Ovi Trif <ovitrif@users.noreply.github.com>
@piotr-iohk
piotr-iohkforce-pushed the claude/issue-680-20260120-1548 branch from 93596f0 to 5faa001CompareJanuary 26, 2026 10:28
@piotr-iohk

Copy link
Copy Markdown
Collaborator

Follow-up fixes:

  • Fixed "claiming 0" display issue - amount now passed directly to loading screen
  • Timed sheets no longer dismiss gift/send/auth sheets when app starts via deep link
  • fix: only insert gift activity when opening new channel (With existing channel, LDK auto-creates the activity - no need to insert. Without channel, we manually insert (matching iOS behavior).)

I have tested on staging regtest, but it would be good to have it tested on mainnet. Unfortunately not able to build for mainnet (missing mainnet google-services.json) @ovitrif@jvsena42

Tests:

  • Claim via deep link (cold start) - amount shows correctly, not dismissed by timed sheets
    • with no channel
    • with existing channel
  • Claim via deep link (warm start) - amount shows correctly
    • with no channel
    • with existing channel
  • Claim already redeemed code - shows "Used code" sheet
  • Test with an exhausted/depleted gift code - shows "Out of Gifts" sheet

@piotr-iohk It would be nice adding E2E tests in the future. there are some bash commands to simulate the gift code

Yes, I have already claimed (pun intented) a cicd regtest code from @dzdidi and added relevant task to backlog: synonymdev/bitkit-e2e-tests#113

@claude

This comment has been minimized.

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Code LGTM, building mainnet for "dev" QA (ie. pre-merge check)

EDIT: done

@ovitrif

ovitrif commented Jan 26, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Tested deep link on mainnet successfully ✅ , case 1️⃣ : Happy Path, Gift of ₿ 2100

Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
@ovitrif
ovitrif requested a review from jvsena42January 26, 2026 11:24

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Awaiting final testing result then ready to merge IMO

@claude

This comment has been minimized.

jvsena42
jvsena42 previously approved these changes Jan 26, 2026

@jvsena42jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Tested on retest, the scenario https://github.com/synonymdev/bitkit-android/pull/689/files#r2727217686 is unlikely to happen

@piotr-iohk

Copy link
Copy Markdown
Collaborator

Tested on mainnet with deeplink:

  • with and without channel ✔️
  • already redeemed code ✔️

@jvsena42
jvsena42 enabled auto-merge January 26, 2026 11:58
@jvsena42
jvsena42 merged commit 1273542 into masterJan 26, 2026
16 checks passed
@jvsena42
jvsena42 deleted the claude/issue-680-20260120-1548 branch January 26, 2026 12:12
Sign up for freeto 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.

Easter Egg Marketing Campaign – Gift code flow behaves inconsistently

3 participants

@ovitrif@jvsena42@piotr-iohk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix: improve gift code flow - #689

Merged
jvsena42 merged 7 commits into
masterfrom
claude/issue-680-20260120-1548
Jan 26, 2026
Merged

fix: improve gift code flow#689
jvsena42 merged 7 commits into
masterfrom
claude/issue-680-20260120-1548

Conversation

@ovitrif

@ovitrifovitrif commented Jan 20, 2026

Copy link
Copy Markdown
Collaborator

Fixes#680

Improves the UX of the Easter Egg gift code redemption flow by adding better logging, error handling, and validation.

Description

  • Add comprehensive logging throughout gift claim operations for better debugging
  • Fix amount=0 handling to allow backend validation instead of rejecting upfront
  • Improve error messages with full error chain context
  • Add operation guards to prevent duplicate claim attempts
  • Validate that channel funding transaction exists
  • Better error classification (Used/UsedUp/Error)

QA Notes

Test scenarios:

  1. Test with a valid gift code (happy path)
  2. Test with a gift code that has amount=0 in QR
  3. Test with an already-used gift code
  4. Test with an exhausted/depleted gift code
  5. Test in both liquidity scenarios (with/without existing channels)
  6. Monitor logs to verify detailed debug information is captured

@ovitrifovitrif changed the title fix: improve gift code redemption flowfix: improve gift code flowJan 20, 2026

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

@claude Address my PR review comments.

Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
@claude

This comment has been minimized.

@ovitrifovitrif assigned ovitrif and unassigned ovitrifJan 22, 2026
@piotr-iohk
piotr-iohkforce-pushed the claude/issue-680-20260120-1548 branch from 176e902 to 37093aeCompareJanuary 26, 2026 07:59
@piotr-iohk
piotr-iohk marked this pull request as ready for review January 26, 2026 09:26
@jvsena42

Copy link
Copy Markdown
Member

@piotr-iohk It would be nice adding E2E tests in the future. there are some bash commands to simulate the gift code

@ovitrif
ovitrifforce-pushed the claude/issue-680-20260120-1548 branch from fa1f3b0 to 4450f23CompareJanuary 26, 2026 10:11
@jvsena42

Copy link
Copy Markdown
Member

gift codes here
#473

@ovitrif
ovitrifforce-pushed the claude/issue-680-20260120-1548 branch from 4450f23 to 93596f0CompareJanuary 26, 2026 10:15
github-actionsBotand others added 5 commits January 26, 2026 11:28
- Add comprehensive logging for gift claim operations
- Fix amount=0 handling to proceed with backend validation
- Improve error messages with full error chain context
- Add operation guards to prevent duplicate claims
- Validate channel funding transaction exists
- Better error classification (Used/UsedUp/Error)
Co-authored-by: Ovi Trif <ovitrif@users.noreply.github.com>
Co-authored-by: Ovi Trif <ovitrif@users.noreply.github.com>
@piotr-iohk
piotr-iohkforce-pushed the claude/issue-680-20260120-1548 branch from 93596f0 to 5faa001CompareJanuary 26, 2026 10:28
@piotr-iohk

Copy link
Copy Markdown
Collaborator

Follow-up fixes:

  • Fixed "claiming 0" display issue - amount now passed directly to loading screen
  • Timed sheets no longer dismiss gift/send/auth sheets when app starts via deep link
  • fix: only insert gift activity when opening new channel (With existing channel, LDK auto-creates the activity - no need to insert. Without channel, we manually insert (matching iOS behavior).)

I have tested on staging regtest, but it would be good to have it tested on mainnet. Unfortunately not able to build for mainnet (missing mainnet google-services.json) @ovitrif@jvsena42

Tests:

  • Claim via deep link (cold start) - amount shows correctly, not dismissed by timed sheets
    • with no channel
    • with existing channel
  • Claim via deep link (warm start) - amount shows correctly
    • with no channel
    • with existing channel
  • Claim already redeemed code - shows "Used code" sheet
  • Test with an exhausted/depleted gift code - shows "Out of Gifts" sheet

@piotr-iohk It would be nice adding E2E tests in the future. there are some bash commands to simulate the gift code

Yes, I have already claimed (pun intented) a cicd regtest code from @dzdidi and added relevant task to backlog: synonymdev/bitkit-e2e-tests#113

@claude

This comment has been minimized.

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Code LGTM, building mainnet for "dev" QA (ie. pre-merge check)

EDIT: done

@ovitrif

ovitrif commented Jan 26, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Tested deep link on mainnet successfully ✅ , case 1️⃣ : Happy Path, Gift of ₿ 2100

Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
@ovitrif
ovitrif requested a review from jvsena42January 26, 2026 11:24

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Awaiting final testing result then ready to merge IMO

@claude

This comment has been minimized.

jvsena42
jvsena42 previously approved these changes Jan 26, 2026

@jvsena42jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Tested on retest, the scenario https://github.com/synonymdev/bitkit-android/pull/689/files#r2727217686 is unlikely to happen

@piotr-iohk

Copy link
Copy Markdown
Collaborator

Tested on mainnet with deeplink:

  • with and without channel ✔️
  • already redeemed code ✔️

@jvsena42
jvsena42 enabled auto-merge January 26, 2026 11:58
@jvsena42
jvsena42 merged commit 1273542 into masterJan 26, 2026
16 checks passed
@jvsena42
jvsena42 deleted the claude/issue-680-20260120-1548 branch January 26, 2026 12:12
Sign up for freeto 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.

Easter Egg Marketing Campaign – Gift code flow behaves inconsistently

3 participants

@ovitrif@jvsena42@piotr-iohk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: improve gift code flow - #689

Merged
jvsena42 merged 7 commits into
masterfrom
claude/issue-680-20260120-1548
Jan 26, 2026
Merged

fix: improve gift code flow#689
jvsena42 merged 7 commits into
masterfrom
claude/issue-680-20260120-1548

Conversation

@ovitrif

@ovitrifovitrif commented Jan 20, 2026

Copy link
Copy Markdown
Collaborator

Fixes#680

Improves the UX of the Easter Egg gift code redemption flow by adding better logging, error handling, and validation.

Description

  • Add comprehensive logging throughout gift claim operations for better debugging
  • Fix amount=0 handling to allow backend validation instead of rejecting upfront
  • Improve error messages with full error chain context
  • Add operation guards to prevent duplicate claim attempts
  • Validate that channel funding transaction exists
  • Better error classification (Used/UsedUp/Error)

QA Notes

Test scenarios:

  1. Test with a valid gift code (happy path)
  2. Test with a gift code that has amount=0 in QR
  3. Test with an already-used gift code
  4. Test with an exhausted/depleted gift code
  5. Test in both liquidity scenarios (with/without existing channels)
  6. Monitor logs to verify detailed debug information is captured

@ovitrifovitrif changed the title fix: improve gift code redemption flowfix: improve gift code flowJan 20, 2026

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

@claude Address my PR review comments.

Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
@claude

This comment has been minimized.

@ovitrifovitrif assigned ovitrif and unassigned ovitrifJan 22, 2026
@piotr-iohk
piotr-iohkforce-pushed the claude/issue-680-20260120-1548 branch from 176e902 to 37093aeCompareJanuary 26, 2026 07:59
@piotr-iohk
piotr-iohk marked this pull request as ready for review January 26, 2026 09:26
@jvsena42

Copy link
Copy Markdown
Member

@piotr-iohk It would be nice adding E2E tests in the future. there are some bash commands to simulate the gift code

@ovitrif
ovitrifforce-pushed the claude/issue-680-20260120-1548 branch from fa1f3b0 to 4450f23CompareJanuary 26, 2026 10:11
@jvsena42

Copy link
Copy Markdown
Member

gift codes here
#473

@ovitrif
ovitrifforce-pushed the claude/issue-680-20260120-1548 branch from 4450f23 to 93596f0CompareJanuary 26, 2026 10:15
github-actionsBotand others added 5 commits January 26, 2026 11:28
- Add comprehensive logging for gift claim operations
- Fix amount=0 handling to proceed with backend validation
- Improve error messages with full error chain context
- Add operation guards to prevent duplicate claims
- Validate channel funding transaction exists
- Better error classification (Used/UsedUp/Error)
Co-authored-by: Ovi Trif <ovitrif@users.noreply.github.com>
Co-authored-by: Ovi Trif <ovitrif@users.noreply.github.com>
@piotr-iohk
piotr-iohkforce-pushed the claude/issue-680-20260120-1548 branch from 93596f0 to 5faa001CompareJanuary 26, 2026 10:28
@piotr-iohk

Copy link
Copy Markdown
Collaborator

Follow-up fixes:

  • Fixed "claiming 0" display issue - amount now passed directly to loading screen
  • Timed sheets no longer dismiss gift/send/auth sheets when app starts via deep link
  • fix: only insert gift activity when opening new channel (With existing channel, LDK auto-creates the activity - no need to insert. Without channel, we manually insert (matching iOS behavior).)

I have tested on staging regtest, but it would be good to have it tested on mainnet. Unfortunately not able to build for mainnet (missing mainnet google-services.json) @ovitrif@jvsena42

Tests:

  • Claim via deep link (cold start) - amount shows correctly, not dismissed by timed sheets
    • with no channel
    • with existing channel
  • Claim via deep link (warm start) - amount shows correctly
    • with no channel
    • with existing channel
  • Claim already redeemed code - shows "Used code" sheet
  • Test with an exhausted/depleted gift code - shows "Out of Gifts" sheet

@piotr-iohk It would be nice adding E2E tests in the future. there are some bash commands to simulate the gift code

Yes, I have already claimed (pun intented) a cicd regtest code from @dzdidi and added relevant task to backlog: synonymdev/bitkit-e2e-tests#113

@claude

This comment has been minimized.

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Code LGTM, building mainnet for "dev" QA (ie. pre-merge check)

EDIT: done

@ovitrif

ovitrif commented Jan 26, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Tested deep link on mainnet successfully ✅ , case 1️⃣ : Happy Path, Gift of ₿ 2100

Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
@ovitrif
ovitrif requested a review from jvsena42January 26, 2026 11:24

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Awaiting final testing result then ready to merge IMO

@claude

This comment has been minimized.

jvsena42
jvsena42 previously approved these changes Jan 26, 2026

@jvsena42jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Tested on retest, the scenario https://github.com/synonymdev/bitkit-android/pull/689/files#r2727217686 is unlikely to happen

@piotr-iohk

Copy link
Copy Markdown
Collaborator

Tested on mainnet with deeplink:

  • with and without channel ✔️
  • already redeemed code ✔️

@jvsena42
jvsena42 enabled auto-merge January 26, 2026 11:58
@jvsena42
jvsena42 merged commit 1273542 into masterJan 26, 2026
16 checks passed
@jvsena42
jvsena42 deleted the claude/issue-680-20260120-1548 branch January 26, 2026 12:12
Sign up for freeto 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.

Easter Egg Marketing Campaign – Gift code flow behaves inconsistently

3 participants

@ovitrif@jvsena42@piotr-iohk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: improve gift code flow - #689

Merged
jvsena42 merged 7 commits into
masterfrom
claude/issue-680-20260120-1548
Jan 26, 2026
Merged

fix: improve gift code flow#689
jvsena42 merged 7 commits into
masterfrom
claude/issue-680-20260120-1548

Conversation

@ovitrif

@ovitrifovitrif commented Jan 20, 2026

Copy link
Copy Markdown
Collaborator

Fixes#680

Improves the UX of the Easter Egg gift code redemption flow by adding better logging, error handling, and validation.

Description

  • Add comprehensive logging throughout gift claim operations for better debugging
  • Fix amount=0 handling to allow backend validation instead of rejecting upfront
  • Improve error messages with full error chain context
  • Add operation guards to prevent duplicate claim attempts
  • Validate that channel funding transaction exists
  • Better error classification (Used/UsedUp/Error)

QA Notes

Test scenarios:

  1. Test with a valid gift code (happy path)
  2. Test with a gift code that has amount=0 in QR
  3. Test with an already-used gift code
  4. Test with an exhausted/depleted gift code
  5. Test in both liquidity scenarios (with/without existing channels)
  6. Monitor logs to verify detailed debug information is captured

@ovitrifovitrif changed the title fix: improve gift code redemption flowfix: improve gift code flowJan 20, 2026

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

@claude Address my PR review comments.

Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
@claude

This comment has been minimized.

@ovitrifovitrif assigned ovitrif and unassigned ovitrifJan 22, 2026
@piotr-iohk
piotr-iohkforce-pushed the claude/issue-680-20260120-1548 branch from 176e902 to 37093aeCompareJanuary 26, 2026 07:59
@piotr-iohk
piotr-iohk marked this pull request as ready for review January 26, 2026 09:26
@jvsena42

Copy link
Copy Markdown
Member

@piotr-iohk It would be nice adding E2E tests in the future. there are some bash commands to simulate the gift code

@ovitrif
ovitrifforce-pushed the claude/issue-680-20260120-1548 branch from fa1f3b0 to 4450f23CompareJanuary 26, 2026 10:11
@jvsena42

Copy link
Copy Markdown
Member

gift codes here
#473

@ovitrif
ovitrifforce-pushed the claude/issue-680-20260120-1548 branch from 4450f23 to 93596f0CompareJanuary 26, 2026 10:15
github-actionsBotand others added 5 commits January 26, 2026 11:28
- Add comprehensive logging for gift claim operations
- Fix amount=0 handling to proceed with backend validation
- Improve error messages with full error chain context
- Add operation guards to prevent duplicate claims
- Validate channel funding transaction exists
- Better error classification (Used/UsedUp/Error)
Co-authored-by: Ovi Trif <ovitrif@users.noreply.github.com>
Co-authored-by: Ovi Trif <ovitrif@users.noreply.github.com>
@piotr-iohk
piotr-iohkforce-pushed the claude/issue-680-20260120-1548 branch from 93596f0 to 5faa001CompareJanuary 26, 2026 10:28
@piotr-iohk

Copy link
Copy Markdown
Collaborator

Follow-up fixes:

  • Fixed "claiming 0" display issue - amount now passed directly to loading screen
  • Timed sheets no longer dismiss gift/send/auth sheets when app starts via deep link
  • fix: only insert gift activity when opening new channel (With existing channel, LDK auto-creates the activity - no need to insert. Without channel, we manually insert (matching iOS behavior).)

I have tested on staging regtest, but it would be good to have it tested on mainnet. Unfortunately not able to build for mainnet (missing mainnet google-services.json) @ovitrif@jvsena42

Tests:

  • Claim via deep link (cold start) - amount shows correctly, not dismissed by timed sheets
    • with no channel
    • with existing channel
  • Claim via deep link (warm start) - amount shows correctly
    • with no channel
    • with existing channel
  • Claim already redeemed code - shows "Used code" sheet
  • Test with an exhausted/depleted gift code - shows "Out of Gifts" sheet

@piotr-iohk It would be nice adding E2E tests in the future. there are some bash commands to simulate the gift code

Yes, I have already claimed (pun intented) a cicd regtest code from @dzdidi and added relevant task to backlog: synonymdev/bitkit-e2e-tests#113

@claude

This comment has been minimized.

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Code LGTM, building mainnet for "dev" QA (ie. pre-merge check)

EDIT: done

@ovitrif

ovitrif commented Jan 26, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Tested deep link on mainnet successfully ✅ , case 1️⃣ : Happy Path, Gift of ₿ 2100

Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
@ovitrif
ovitrif requested a review from jvsena42January 26, 2026 11:24

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Awaiting final testing result then ready to merge IMO

@claude

This comment has been minimized.

jvsena42
jvsena42 previously approved these changes Jan 26, 2026

@jvsena42jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Tested on retest, the scenario https://github.com/synonymdev/bitkit-android/pull/689/files#r2727217686 is unlikely to happen

@piotr-iohk

Copy link
Copy Markdown
Collaborator

Tested on mainnet with deeplink:

  • with and without channel ✔️
  • already redeemed code ✔️

@jvsena42
jvsena42 enabled auto-merge January 26, 2026 11:58
@jvsena42
jvsena42 merged commit 1273542 into masterJan 26, 2026
16 checks passed
@jvsena42
jvsena42 deleted the claude/issue-680-20260120-1548 branch January 26, 2026 12:12
Sign up for freeto 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.

Easter Egg Marketing Campaign – Gift code flow behaves inconsistently

3 participants

@ovitrif@jvsena42@piotr-iohk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix: improve gift code flow - #689

Merged
jvsena42 merged 7 commits into
masterfrom
claude/issue-680-20260120-1548
Jan 26, 2026
Merged

fix: improve gift code flow#689
jvsena42 merged 7 commits into
masterfrom
claude/issue-680-20260120-1548

Conversation

@ovitrif

@ovitrifovitrif commented Jan 20, 2026

Copy link
Copy Markdown
Collaborator

Fixes#680

Improves the UX of the Easter Egg gift code redemption flow by adding better logging, error handling, and validation.

Description

  • Add comprehensive logging throughout gift claim operations for better debugging
  • Fix amount=0 handling to allow backend validation instead of rejecting upfront
  • Improve error messages with full error chain context
  • Add operation guards to prevent duplicate claim attempts
  • Validate that channel funding transaction exists
  • Better error classification (Used/UsedUp/Error)

QA Notes

Test scenarios:

  1. Test with a valid gift code (happy path)
  2. Test with a gift code that has amount=0 in QR
  3. Test with an already-used gift code
  4. Test with an exhausted/depleted gift code
  5. Test in both liquidity scenarios (with/without existing channels)
  6. Monitor logs to verify detailed debug information is captured

@ovitrifovitrif changed the title fix: improve gift code redemption flowfix: improve gift code flowJan 20, 2026

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

@claude Address my PR review comments.

Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
@claude

This comment has been minimized.

@ovitrifovitrif assigned ovitrif and unassigned ovitrifJan 22, 2026
@piotr-iohk
piotr-iohkforce-pushed the claude/issue-680-20260120-1548 branch from 176e902 to 37093aeCompareJanuary 26, 2026 07:59
@piotr-iohk
piotr-iohk marked this pull request as ready for review January 26, 2026 09:26
@jvsena42

Copy link
Copy Markdown
Member

@piotr-iohk It would be nice adding E2E tests in the future. there are some bash commands to simulate the gift code

@ovitrif
ovitrifforce-pushed the claude/issue-680-20260120-1548 branch from fa1f3b0 to 4450f23CompareJanuary 26, 2026 10:11
@jvsena42

Copy link
Copy Markdown
Member

gift codes here
#473

@ovitrif
ovitrifforce-pushed the claude/issue-680-20260120-1548 branch from 4450f23 to 93596f0CompareJanuary 26, 2026 10:15
github-actionsBotand others added 5 commits January 26, 2026 11:28
- Add comprehensive logging for gift claim operations
- Fix amount=0 handling to proceed with backend validation
- Improve error messages with full error chain context
- Add operation guards to prevent duplicate claims
- Validate channel funding transaction exists
- Better error classification (Used/UsedUp/Error)
Co-authored-by: Ovi Trif <ovitrif@users.noreply.github.com>
Co-authored-by: Ovi Trif <ovitrif@users.noreply.github.com>
@piotr-iohk
piotr-iohkforce-pushed the claude/issue-680-20260120-1548 branch from 93596f0 to 5faa001CompareJanuary 26, 2026 10:28
@piotr-iohk

Copy link
Copy Markdown
Collaborator

Follow-up fixes:

  • Fixed "claiming 0" display issue - amount now passed directly to loading screen
  • Timed sheets no longer dismiss gift/send/auth sheets when app starts via deep link
  • fix: only insert gift activity when opening new channel (With existing channel, LDK auto-creates the activity - no need to insert. Without channel, we manually insert (matching iOS behavior).)

I have tested on staging regtest, but it would be good to have it tested on mainnet. Unfortunately not able to build for mainnet (missing mainnet google-services.json) @ovitrif@jvsena42

Tests:

  • Claim via deep link (cold start) - amount shows correctly, not dismissed by timed sheets
    • with no channel
    • with existing channel
  • Claim via deep link (warm start) - amount shows correctly
    • with no channel
    • with existing channel
  • Claim already redeemed code - shows "Used code" sheet
  • Test with an exhausted/depleted gift code - shows "Out of Gifts" sheet

@piotr-iohk It would be nice adding E2E tests in the future. there are some bash commands to simulate the gift code

Yes, I have already claimed (pun intented) a cicd regtest code from @dzdidi and added relevant task to backlog: synonymdev/bitkit-e2e-tests#113

@claude

This comment has been minimized.

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Code LGTM, building mainnet for "dev" QA (ie. pre-merge check)

EDIT: done

@ovitrif

ovitrif commented Jan 26, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Tested deep link on mainnet successfully ✅ , case 1️⃣ : Happy Path, Gift of ₿ 2100

Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
@ovitrif
ovitrif requested a review from jvsena42January 26, 2026 11:24

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Awaiting final testing result then ready to merge IMO

@claude

This comment has been minimized.

jvsena42
jvsena42 previously approved these changes Jan 26, 2026

@jvsena42jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Tested on retest, the scenario https://github.com/synonymdev/bitkit-android/pull/689/files#r2727217686 is unlikely to happen

@piotr-iohk

Copy link
Copy Markdown
Collaborator

Tested on mainnet with deeplink:

  • with and without channel ✔️
  • already redeemed code ✔️

@jvsena42
jvsena42 enabled auto-merge January 26, 2026 11:58
@jvsena42
jvsena42 merged commit 1273542 into masterJan 26, 2026
16 checks passed
@jvsena42
jvsena42 deleted the claude/issue-680-20260120-1548 branch January 26, 2026 12:12
Sign up for freeto 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.

Easter Egg Marketing Campaign – Gift code flow behaves inconsistently

3 participants

@ovitrif@jvsena42@piotr-iohk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: improve gift code flow - #689

Merged
jvsena42 merged 7 commits into
masterfrom
claude/issue-680-20260120-1548
Jan 26, 2026
Merged

fix: improve gift code flow#689
jvsena42 merged 7 commits into
masterfrom
claude/issue-680-20260120-1548

Conversation

@ovitrif

@ovitrifovitrif commented Jan 20, 2026

Copy link
Copy Markdown
Collaborator

Fixes#680

Improves the UX of the Easter Egg gift code redemption flow by adding better logging, error handling, and validation.

Description

  • Add comprehensive logging throughout gift claim operations for better debugging
  • Fix amount=0 handling to allow backend validation instead of rejecting upfront
  • Improve error messages with full error chain context
  • Add operation guards to prevent duplicate claim attempts
  • Validate that channel funding transaction exists
  • Better error classification (Used/UsedUp/Error)

QA Notes

Test scenarios:

  1. Test with a valid gift code (happy path)
  2. Test with a gift code that has amount=0 in QR
  3. Test with an already-used gift code
  4. Test with an exhausted/depleted gift code
  5. Test in both liquidity scenarios (with/without existing channels)
  6. Monitor logs to verify detailed debug information is captured

@ovitrifovitrif changed the title fix: improve gift code redemption flowfix: improve gift code flowJan 20, 2026

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

@claude Address my PR review comments.

Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
@claude

This comment has been minimized.

@ovitrifovitrif assigned ovitrif and unassigned ovitrifJan 22, 2026
@piotr-iohk
piotr-iohkforce-pushed the claude/issue-680-20260120-1548 branch from 176e902 to 37093aeCompareJanuary 26, 2026 07:59
@piotr-iohk
piotr-iohk marked this pull request as ready for review January 26, 2026 09:26
@jvsena42

Copy link
Copy Markdown
Member

@piotr-iohk It would be nice adding E2E tests in the future. there are some bash commands to simulate the gift code

@ovitrif
ovitrifforce-pushed the claude/issue-680-20260120-1548 branch from fa1f3b0 to 4450f23CompareJanuary 26, 2026 10:11
@jvsena42

Copy link
Copy Markdown
Member

gift codes here
#473

@ovitrif
ovitrifforce-pushed the claude/issue-680-20260120-1548 branch from 4450f23 to 93596f0CompareJanuary 26, 2026 10:15
github-actionsBotand others added 5 commits January 26, 2026 11:28
- Add comprehensive logging for gift claim operations
- Fix amount=0 handling to proceed with backend validation
- Improve error messages with full error chain context
- Add operation guards to prevent duplicate claims
- Validate channel funding transaction exists
- Better error classification (Used/UsedUp/Error)
Co-authored-by: Ovi Trif <ovitrif@users.noreply.github.com>
Co-authored-by: Ovi Trif <ovitrif@users.noreply.github.com>
@piotr-iohk
piotr-iohkforce-pushed the claude/issue-680-20260120-1548 branch from 93596f0 to 5faa001CompareJanuary 26, 2026 10:28
@piotr-iohk

Copy link
Copy Markdown
Collaborator

Follow-up fixes:

  • Fixed "claiming 0" display issue - amount now passed directly to loading screen
  • Timed sheets no longer dismiss gift/send/auth sheets when app starts via deep link
  • fix: only insert gift activity when opening new channel (With existing channel, LDK auto-creates the activity - no need to insert. Without channel, we manually insert (matching iOS behavior).)

I have tested on staging regtest, but it would be good to have it tested on mainnet. Unfortunately not able to build for mainnet (missing mainnet google-services.json) @ovitrif@jvsena42

Tests:

  • Claim via deep link (cold start) - amount shows correctly, not dismissed by timed sheets
    • with no channel
    • with existing channel
  • Claim via deep link (warm start) - amount shows correctly
    • with no channel
    • with existing channel
  • Claim already redeemed code - shows "Used code" sheet
  • Test with an exhausted/depleted gift code - shows "Out of Gifts" sheet

@piotr-iohk It would be nice adding E2E tests in the future. there are some bash commands to simulate the gift code

Yes, I have already claimed (pun intented) a cicd regtest code from @dzdidi and added relevant task to backlog: synonymdev/bitkit-e2e-tests#113

@claude

This comment has been minimized.

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Code LGTM, building mainnet for "dev" QA (ie. pre-merge check)

EDIT: done

@ovitrif

ovitrif commented Jan 26, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Tested deep link on mainnet successfully ✅ , case 1️⃣ : Happy Path, Gift of ₿ 2100

Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
@ovitrif
ovitrif requested a review from jvsena42January 26, 2026 11:24

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Awaiting final testing result then ready to merge IMO

@claude

This comment has been minimized.

jvsena42
jvsena42 previously approved these changes Jan 26, 2026

@jvsena42jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Tested on retest, the scenario https://github.com/synonymdev/bitkit-android/pull/689/files#r2727217686 is unlikely to happen

@piotr-iohk

Copy link
Copy Markdown
Collaborator

Tested on mainnet with deeplink:

  • with and without channel ✔️
  • already redeemed code ✔️

@jvsena42
jvsena42 enabled auto-merge January 26, 2026 11:58
@jvsena42
jvsena42 merged commit 1273542 into masterJan 26, 2026
16 checks passed
@jvsena42
jvsena42 deleted the claude/issue-680-20260120-1548 branch January 26, 2026 12:12
Sign up for freeto 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.

Easter Egg Marketing Campaign – Gift code flow behaves inconsistently

3 participants

@ovitrif@jvsena42@piotr-iohk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: improve gift code flow - #689

Merged
jvsena42 merged 7 commits into
masterfrom
claude/issue-680-20260120-1548
Jan 26, 2026
Merged

fix: improve gift code flow#689
jvsena42 merged 7 commits into
masterfrom
claude/issue-680-20260120-1548

Conversation

@ovitrif

@ovitrifovitrif commented Jan 20, 2026

Copy link
Copy Markdown
Collaborator

Fixes#680

Improves the UX of the Easter Egg gift code redemption flow by adding better logging, error handling, and validation.

Description

  • Add comprehensive logging throughout gift claim operations for better debugging
  • Fix amount=0 handling to allow backend validation instead of rejecting upfront
  • Improve error messages with full error chain context
  • Add operation guards to prevent duplicate claim attempts
  • Validate that channel funding transaction exists
  • Better error classification (Used/UsedUp/Error)

QA Notes

Test scenarios:

  1. Test with a valid gift code (happy path)
  2. Test with a gift code that has amount=0 in QR
  3. Test with an already-used gift code
  4. Test with an exhausted/depleted gift code
  5. Test in both liquidity scenarios (with/without existing channels)
  6. Monitor logs to verify detailed debug information is captured

@ovitrifovitrif changed the title fix: improve gift code redemption flowfix: improve gift code flowJan 20, 2026

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

@claude Address my PR review comments.

Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
@claude

This comment has been minimized.

@ovitrifovitrif assigned ovitrif and unassigned ovitrifJan 22, 2026
@piotr-iohk
piotr-iohkforce-pushed the claude/issue-680-20260120-1548 branch from 176e902 to 37093aeCompareJanuary 26, 2026 07:59
@piotr-iohk
piotr-iohk marked this pull request as ready for review January 26, 2026 09:26
@jvsena42

Copy link
Copy Markdown
Member

@piotr-iohk It would be nice adding E2E tests in the future. there are some bash commands to simulate the gift code

@ovitrif
ovitrifforce-pushed the claude/issue-680-20260120-1548 branch from fa1f3b0 to 4450f23CompareJanuary 26, 2026 10:11
@jvsena42

Copy link
Copy Markdown
Member

gift codes here
#473

@ovitrif
ovitrifforce-pushed the claude/issue-680-20260120-1548 branch from 4450f23 to 93596f0CompareJanuary 26, 2026 10:15
github-actionsBotand others added 5 commits January 26, 2026 11:28
- Add comprehensive logging for gift claim operations
- Fix amount=0 handling to proceed with backend validation
- Improve error messages with full error chain context
- Add operation guards to prevent duplicate claims
- Validate channel funding transaction exists
- Better error classification (Used/UsedUp/Error)
Co-authored-by: Ovi Trif <ovitrif@users.noreply.github.com>
Co-authored-by: Ovi Trif <ovitrif@users.noreply.github.com>
@piotr-iohk
piotr-iohkforce-pushed the claude/issue-680-20260120-1548 branch from 93596f0 to 5faa001CompareJanuary 26, 2026 10:28
@piotr-iohk

Copy link
Copy Markdown
Collaborator

Follow-up fixes:

  • Fixed "claiming 0" display issue - amount now passed directly to loading screen
  • Timed sheets no longer dismiss gift/send/auth sheets when app starts via deep link
  • fix: only insert gift activity when opening new channel (With existing channel, LDK auto-creates the activity - no need to insert. Without channel, we manually insert (matching iOS behavior).)

I have tested on staging regtest, but it would be good to have it tested on mainnet. Unfortunately not able to build for mainnet (missing mainnet google-services.json) @ovitrif@jvsena42

Tests:

  • Claim via deep link (cold start) - amount shows correctly, not dismissed by timed sheets
    • with no channel
    • with existing channel
  • Claim via deep link (warm start) - amount shows correctly
    • with no channel
    • with existing channel
  • Claim already redeemed code - shows "Used code" sheet
  • Test with an exhausted/depleted gift code - shows "Out of Gifts" sheet

@piotr-iohk It would be nice adding E2E tests in the future. there are some bash commands to simulate the gift code

Yes, I have already claimed (pun intented) a cicd regtest code from @dzdidi and added relevant task to backlog: synonymdev/bitkit-e2e-tests#113

@claude

This comment has been minimized.

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Code LGTM, building mainnet for "dev" QA (ie. pre-merge check)

EDIT: done

@ovitrif

ovitrif commented Jan 26, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Tested deep link on mainnet successfully ✅ , case 1️⃣ : Happy Path, Gift of ₿ 2100

Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
@ovitrif
ovitrif requested a review from jvsena42January 26, 2026 11:24

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Awaiting final testing result then ready to merge IMO

@claude

This comment has been minimized.

jvsena42
jvsena42 previously approved these changes Jan 26, 2026

@jvsena42jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Tested on retest, the scenario https://github.com/synonymdev/bitkit-android/pull/689/files#r2727217686 is unlikely to happen

@piotr-iohk

Copy link
Copy Markdown
Collaborator

Tested on mainnet with deeplink:

  • with and without channel ✔️
  • already redeemed code ✔️

@jvsena42
jvsena42 enabled auto-merge January 26, 2026 11:58
@jvsena42
jvsena42 merged commit 1273542 into masterJan 26, 2026
16 checks passed
@jvsena42
jvsena42 deleted the claude/issue-680-20260120-1548 branch January 26, 2026 12:12
Sign up for freeto 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.

Easter Egg Marketing Campaign – Gift code flow behaves inconsistently

3 participants

@ovitrif@jvsena42@piotr-iohk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix: improve gift code flow - #689

Merged
jvsena42 merged 7 commits into
masterfrom
claude/issue-680-20260120-1548
Jan 26, 2026
Merged

fix: improve gift code flow#689
jvsena42 merged 7 commits into
masterfrom
claude/issue-680-20260120-1548

Conversation

@ovitrif

@ovitrifovitrif commented Jan 20, 2026

Copy link
Copy Markdown
Collaborator

Fixes#680

Improves the UX of the Easter Egg gift code redemption flow by adding better logging, error handling, and validation.

Description

  • Add comprehensive logging throughout gift claim operations for better debugging
  • Fix amount=0 handling to allow backend validation instead of rejecting upfront
  • Improve error messages with full error chain context
  • Add operation guards to prevent duplicate claim attempts
  • Validate that channel funding transaction exists
  • Better error classification (Used/UsedUp/Error)

QA Notes

Test scenarios:

  1. Test with a valid gift code (happy path)
  2. Test with a gift code that has amount=0 in QR
  3. Test with an already-used gift code
  4. Test with an exhausted/depleted gift code
  5. Test in both liquidity scenarios (with/without existing channels)
  6. Monitor logs to verify detailed debug information is captured

@ovitrifovitrif changed the title fix: improve gift code redemption flowfix: improve gift code flowJan 20, 2026

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

@claude Address my PR review comments.

Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
Comment threadapp/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt Outdated
@claude

This comment has been minimized.

@ovitrifovitrif assigned ovitrif and unassigned ovitrifJan 22, 2026
@piotr-iohk
piotr-iohkforce-pushed the claude/issue-680-20260120-1548 branch from 176e902 to 37093aeCompareJanuary 26, 2026 07:59
@piotr-iohk
piotr-iohk marked this pull request as ready for review January 26, 2026 09:26
@jvsena42

Copy link
Copy Markdown
Member

@piotr-iohk It would be nice adding E2E tests in the future. there are some bash commands to simulate the gift code

@ovitrif
ovitrifforce-pushed the claude/issue-680-20260120-1548 branch from fa1f3b0 to 4450f23CompareJanuary 26, 2026 10:11
@jvsena42

Copy link
Copy Markdown
Member

gift codes here
#473

@ovitrif
ovitrifforce-pushed the claude/issue-680-20260120-1548 branch from 4450f23 to 93596f0CompareJanuary 26, 2026 10:15
github-actionsBotand others added 5 commits January 26, 2026 11:28
- Add comprehensive logging for gift claim operations
- Fix amount=0 handling to proceed with backend validation
- Improve error messages with full error chain context
- Add operation guards to prevent duplicate claims
- Validate channel funding transaction exists
- Better error classification (Used/UsedUp/Error)
Co-authored-by: Ovi Trif <ovitrif@users.noreply.github.com>
Co-authored-by: Ovi Trif <ovitrif@users.noreply.github.com>
@piotr-iohk
piotr-iohkforce-pushed the claude/issue-680-20260120-1548 branch from 93596f0 to 5faa001CompareJanuary 26, 2026 10:28
@piotr-iohk

Copy link
Copy Markdown
Collaborator

Follow-up fixes:

  • Fixed "claiming 0" display issue - amount now passed directly to loading screen
  • Timed sheets no longer dismiss gift/send/auth sheets when app starts via deep link
  • fix: only insert gift activity when opening new channel (With existing channel, LDK auto-creates the activity - no need to insert. Without channel, we manually insert (matching iOS behavior).)

I have tested on staging regtest, but it would be good to have it tested on mainnet. Unfortunately not able to build for mainnet (missing mainnet google-services.json) @ovitrif@jvsena42

Tests:

  • Claim via deep link (cold start) - amount shows correctly, not dismissed by timed sheets
    • with no channel
    • with existing channel
  • Claim via deep link (warm start) - amount shows correctly
    • with no channel
    • with existing channel
  • Claim already redeemed code - shows "Used code" sheet
  • Test with an exhausted/depleted gift code - shows "Out of Gifts" sheet

@piotr-iohk It would be nice adding E2E tests in the future. there are some bash commands to simulate the gift code

Yes, I have already claimed (pun intented) a cicd regtest code from @dzdidi and added relevant task to backlog: synonymdev/bitkit-e2e-tests#113

@claude

This comment has been minimized.

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Code LGTM, building mainnet for "dev" QA (ie. pre-merge check)

EDIT: done

@ovitrif

ovitrif commented Jan 26, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Tested deep link on mainnet successfully ✅ , case 1️⃣ : Happy Path, Gift of ₿ 2100

Comment threadapp/src/main/java/to/bitkit/repositories/BlocktankRepo.kt Outdated
@ovitrif
ovitrif requested a review from jvsena42January 26, 2026 11:24

@ovitrifovitrif left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Awaiting final testing result then ready to merge IMO

@claude

This comment has been minimized.

jvsena42
jvsena42 previously approved these changes Jan 26, 2026

@jvsena42jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Tested on retest, the scenario https://github.com/synonymdev/bitkit-android/pull/689/files#r2727217686 is unlikely to happen

@piotr-iohk

Copy link
Copy Markdown
Collaborator

Tested on mainnet with deeplink:

  • with and without channel ✔️
  • already redeemed code ✔️

@jvsena42
jvsena42 enabled auto-merge January 26, 2026 11:58
@jvsena42
jvsena42 merged commit 1273542 into masterJan 26, 2026
16 checks passed
@jvsena42
jvsena42 deleted the claude/issue-680-20260120-1548 branch January 26, 2026 12:12
Sign up for freeto 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.

Easter Egg Marketing Campaign – Gift code flow behaves inconsistently

3 participants

@ovitrif@jvsena42@piotr-iohk