Skip to content

add git commit to chatwoot custom attributes - #563

Merged
bordalix merged 1 commit into
masterfrom
add_git_commit_to_chatwoot
Apr 23, 2026
Merged

bordalix merged 1 commit into
masterfrom
add_git_commit_to_chatwoot

Conversation

@bordalix

@bordalix bordalix commented Apr 23, 2026 •

Copy link
Copy Markdown
Collaborator

@Kukks please review

Summary by CodeRabbit

  • Chores
    • Enhanced system metadata tracking to support improved diagnostics and user attribute collection in the Support screen.

@coderabbitai

coderabbitai Bot commented Apr 23, 2026 •

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3f8456d3-6f3f-4fef-9202-f7970cbd52bb

📥 Commits

Reviewing files that changed from the base of the PR and between 6f08911 and a939754.

📒 Files selected for processing (1)
  • src/screens/Settings/Support.tsx

Walkthrough

The Support screen is updated to import a gitCommit value and include it as a git_commit custom attribute in the Chatwoot user custom attributes initialization alongside existing wallet, network, address, and service URL fields.

Changes

Cohort / File(s) Summary
Chatwoot Custom Attributes
src/screens/Settings/Support.tsx
Added gitCommit import and git_commit custom attribute to Chatwoot user initialization.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Possibly related PRs

  • Chatwoot #236: Introduces Chatwoot user-attribute initialization in the Support screen; this PR extends it by adding the git_commit custom attribute to the existing framework.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The pull request title 'add git commit to chatwoot custom attributes' directly and specifically describes the main change in the changeset, which adds a git_commit custom attribute to Chatwoot initialization.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch add_git_commit_to_chatwoot

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 and usage tips.

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying wallet-bitcoin with  Cloudflare Pages  Cloudflare Pages

Latest commit: a939754
Status: ✅  Deploy successful!
Preview URL: https://58c7cf0d.wallet-bitcoin.pages.dev
Branch Preview URL: https://add-git-commit-to-chatwoot.wallet-bitcoin.pages.dev

View logs

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying wallet-mutinynet with  Cloudflare Pages  Cloudflare Pages

Latest commit: a939754
Status: ✅  Deploy successful!
Preview URL: https://1f4a8064.arkade-wallet.pages.dev
Branch Preview URL: https://add-git-commit-to-chatwoot.arkade-wallet.pages.dev

View logs

@ghost ghost 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.

✅ LGTM — Approved

Clean, minimal change. Adds the build-time git commit hash to Chatwoot custom attributes so support can identify exactly which version a user is running.

Reviewed:

  • scripts/git-commit-info.js — already on master, generates src/_gitCommit.ts at build time with short hash + dirty flag. Correct fallback to 'unknown'. Exits non-zero on failure.
  • src/_gitCommit.ts — correctly .gitignored, generated by pnpm git-info which is chained into build and start.
  • src/screens/Settings/Support.tsx:21,89 — import and usage. Simple string constant, no logic change.

Not protocol-critical. No VTXO, signing, forfeit, round, or exit code touched. No cross-repo impact. No security concerns (commit hash is not sensitive and is sent alongside already-exposed pubkey/URLs).

🤖 Reviewed by Arkana

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying tmp-boltz-upstream-mainnet-arkade-wallet with  Cloudflare Pages  Cloudflare Pages

Latest commit: a939754
Status: ✅  Deploy successful!
Preview URL: https://7c42904f.tmp-boltz-upstream-mainnet-arkade-wallet.pages.dev
Branch Preview URL: https://add-git-commit-to-chatwoot.tmp-boltz-upstream-mainnet-arkade-wallet.pages.dev

View logs

@bordalix
bordalix merged commit 2cc1b3b into master Apr 23, 2026
6 checks passed
bordalix added a commit that referenced this pull request Apr 28, 2026
* remove ionic/normalize and ion-button

* rebbit fixes

* feat(wallet): prefix fiat amounts with currency symbols (#535)

Amounts previously rendered with a trailing ISO code (`100.00 USD`, `50.00 EUR`)
now use the common Unicode currency symbol as a prefix: `$100.00`, `€50.00`,
`£25.00`, `¥1,000`. Currencies without a widely-used single-char symbol (CHF,
CNY) keep the trailing-code form, so CNY does not collide with JPY's `¥`.

The new formatters live alongside the existing generic ones:
- `prettyFiatAmount(amount, currency)` and `prettyFiatHide(value, currency)` in
  `src/lib/format.ts` take the `Fiats` enum as a typed parameter.
- The generic `prettyAmount` / `prettyHide` are intentionally left untouched so
  asset tickers (e.g. a stablecoin named `USD`) that flow through those helpers
  keep their trailing-code format.
- Decimals are derived from the currency via `fiatDecimalsFor` in
  `src/lib/fiat.ts` (JPY = 0, others = 2) — shared between `FiatContext` and
  `prettyFiatAmount` so call sites no longer need to pass `fiatDecimals()`.

Touched displays: hero balance (`Balance.tsx`), transaction list rows
(`TransactionsList.tsx`), amount picker (`Keyboard.tsx`), transaction details
(`Details.tsx`), Send/Receive/Notes success screens, and Send form available
caption. Amount input labels (`InputAmount.tsx`) also use the symbol when
available.

Side fix: `Details.tsx` previously called `prettyAmount` without passing
`fiatDecimals()`, hardcoding 2 decimals. JPY now renders as `¥174` / `¥0` in the
transaction details instead of `174.00 JPY` / `0.00 JPY`.

Hero alignment: the eye-toggle button wrapper now omits an empty unit `<Text>`
when the symbol is inlined into the balance, and the button sits inside a
`alignItems: center` flex container next to the unit text — keeping the icon
centered with the smaller ISO code in the CHF case and snug against the balance
in the `$7.30` case.

Tests:
- New coverage for `prettyFiatAmount` and `prettyFiatHide` in
  `src/test/lib/format.test.ts` (symbol + trailing-code + JPY 0-decimals).
- Existing `prettyAmount` / `prettyHide` tests unchanged — the generic helpers
  still behave the same.
- UI assertions updated to match the new rendered text:
  `src/test/screens/wallet/index.test.tsx` → `$0.00`
  `src/test/e2e/init.test.ts` → `$0.00`
  `src/test/e2e/keyboard.test.ts` → symbol-prefix regex

Co-authored-by: Sahil Chaturvedi <sahilc0@users.noreply.github.com>
Co-authored-by: João Bordalo <bordalix@users.noreply.github.com>

* Upgrade ts-sdk 0.4.16 - boltz-swap 0.3.17 (#539)

* reverse logs in csv export (#546)

* reverse logs in csv export

* fix

* avoid mutating the React state array

* Extra tests (#548)

* close copy sheet after copy

* lint

* test swaps in receive

* Prevent swap after receival (#547)

* Prevent swap after receival

* fix

* more removals

* increase viewport size in tests

* more removals

* more removals

* fixes

* fixes

* fixes

* fix

* remove ion-refresher

* Merge branch 'master' into remove_ion-button

* fix swap page (#549)

* fix swap page

* lint

* add tests

* Upgrade ts-sdk 0.4.17 - boltz-swap 0.3.18 (#551)

* fix(receive): add spacing between button row and share button (#552)

The vertical gap between the Add amount/Copy buttons and the Share
button was too tight. Changed FlexCol gap from 0 to 0.75rem.

Co-authored-by: Sahil Chaturvedi <sahilc0@users.noreply.github.com>

* Revert "Upgrade ts-sdk 0.4.17 - boltz-swap 0.3.18 (#551)" (#553)

This reverts commit 1752cc8.

* Upgrade ts-sdk 0.4.17 - boltz-swap 0.3.18 (#551)

* Revert "Upgrade ts-sdk 0.4.17 - boltz-swap 0.3.18 (#551)" (#553)

This reverts commit 1752cc8.

* Upgrade ts-sdk 0.4.18 - boltz-swap 0.3.19 (#554)

* add git commit to chatwoot custom attributes (#563)

* add lnurl tests (#564)

* lint

* add lnurl tests

Co-authored-by: Copilot <copilot@github.com>

---------

Co-authored-by: Copilot <copilot@github.com>

* fix(ui): top-align tx history rows when assets are present (#537)

* fix(ui): top-align tx history rows when assets are present

When a transaction has assets, the right column (sats + fiat + asset
info) is taller than the left column (icon + label + date). The outer
FlexRow used alignItems 'center' by default, pushing the sats amount
above the label text. Switch to alignItems 'start' so both columns
begin at the same vertical position.

Also adds explicit 'between' to the outer FlexRow and removes a dead
alignItems on the non-flex wrapper div.

* show only 2 coins in the rigth side of a tx in txs list (#550)

---------

Co-authored-by: João Bordalo <bordalix@users.noreply.github.com>

* final removal

Co-authored-by: Copilot <copilot@github.com>

* Upgrade ts-sdk 0.4.19 - boltz-swap 0.3.20 (#565)

* lint

* fix box-sizing

Co-authored-by: Copilot <copilot@github.com>

* .label styles

Co-authored-by: Copilot <copilot@github.com>

* fix branta lint error (#568)

* works on refresher

Co-authored-by: Copilot <copilot@github.com>

* fix unit tests

Co-authored-by: Copilot <copilot@github.com>

* remove ionic/react

* fix label alignment

* DRY: AssetCard

Co-authored-by: Copilot <copilot@github.com>

* fix inputAmount

---------

Co-authored-by: Sahil Chaturvedi <sahilchaturvedi@protonmail.com>
Co-authored-by: Sahil Chaturvedi <sahilc0@users.noreply.github.com>
Co-authored-by: pietro909 <2094604+pietro909@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: Andrew Camilleri <evilkukka@gmail.com>
@bordalix
bordalix deleted the add_git_commit_to_chatwoot branch May 18, 2026 16:18
Kukks added a commit that referenced this pull request Jun 14, 2026
Rebuild vendor/*.tgz from arkade-os/ts-sdk@6c59b22. The new commits are
e2e/regtest/CI only (drive signer rotation through the regtest CLI,
run-on-all-PRs, regtest submodule bumps, merge #563) — no src changes,
so the SDK build is unchanged.

Verified against the new build: tsc, build (app + worker), unit tests, and a
frozen CI=true install all pass.
Kukks added a commit that referenced this pull request Jun 15, 2026
…-signer contracts (#670)

* feat: consume ts-sdk PR #554 (arkd signer rotation) and flag deprecated-signer contracts

Build @arkade-os/sdk and @arkade-os/boltz-swap from the unpublished
arkade-os/ts-sdk PR #554 (arkd signer-rotation support) and surface
deprecated signers in the dev-only Contracts list.

Dependency mechanism (temporary, until the SDK is published to npm):
- scripts/prepare-arkade-sdk.js builds both packages from the git ref
  pinned in package.json ("arkadeSdk") into gitignored vendor/*.tgz.
- package.json references them via file:, plus a pnpm override so
  boltz-swap's workspace:* sdk dependency resolves to the same build.
- CI builds the tarballs from the pinned ref before install (Node 24).

Feature:
- Settings > Advanced > Contracts (dev mode only): each contract is
  classified against the operator's advertised signer set. Contracts
  minted under a deprecated signer show a "deprecated signer" badge,
  and "deprecated signer / past cutoff" once the cooperative-migration
  cutoff has passed.
- Background auto-migration (SettlementConfig.deprecatedSignerMigration,
  default true) is unchanged and stays enabled.

* ci: build the SDK from the pinned ref before install, disable frozen lockfile

The first CI run failed at install: pnpm defaults to a frozen lockfile
under CI and rejected the rebuilt vendor/*.tgz (ERR_PNPM_TARBALL_INTEGRITY),
because the tarballs are not byte-reproducible. A preinstall hook can't fix
it either — pnpm resolves the file: dependencies before lifecycle scripts run,
so the tarballs must exist before "pnpm install" starts.

- .npmrc: frozen-lockfile=false (rebuilt tarballs have unstable integrity).
- ci.yml + playwright.yml: build the SDK from the pinned ref into vendor/*.tgz
  in a step before "pnpm install".

Note: Cloudflare Pages preview deploys are configured outside the repo and
cannot run a pre-install build step, so they will fail until the SDK is
published to npm.

* build: commit the vendored SDK tarballs instead of building them in CI

Cloudflare Pages preview deploys are configured outside the repo and run a
bare `pnpm install` with no pre-build step, so they could not build the
unpublished SDK from a git ref. Commit the prebuilt @arkade-os/sdk +
@arkade-os/boltz-swap tarballs so every install context (CI, Playwright,
Cloudflare previews, local) resolves them at checkout under a frozen lockfile.

- vendor/*.tgz are now tracked. Regenerate with `pnpm prepare:sdk` (builds
  from the ref pinned in package.json) and commit the updated tarballs plus
  pnpm-lock.yaml when bumping the ref.
- Revert the CI/Playwright "Build Arkade SDK" steps and the Node 24 bump, and
  remove .npmrc: frozen-lockfile is restored because the committed tarballs
  have stable integrity.

* chore: bump pinned ts-sdk ref to 8b630a0 (PR #554 latest)

Rebuild vendor/*.tgz from arkade-os/ts-sdk@8b630a0. The new commits only
touch digest-mismatch error handling (ark provider) and a DigestMismatchError
export; the signer-rotation classification API the wallet uses is unchanged.

Also switch the contracts test's BigInt literals (1n) to BigInt(): the repo
targets < ES2020, so production code uses BigInt() — CI has no tsc step, so
the literals slipped through.

Verified against the new build: tsc, lint, prettier, build (app + worker),
270 unit tests, and a frozen CI=true install all pass.

* chore: bump pinned ts-sdk ref to 00ed22d (PR #554 latest)

Rebuild vendor/*.tgz from arkade-os/ts-sdk@00ed22d. New commits:
- feat: exclude post-cutoff deprecated-signer funds from spendable balance
- fix(delegate): don't send X-Build-Version to the delegate service (CORS)

The signer-rotation classification API and Contract type the wallet uses
are unchanged. Verified against the new build: tsc, build (app + worker),
270 unit tests, and a frozen CI=true install all pass.

* chore: bump pinned ts-sdk ref to 84267a3 (PR #554 latest)

Rebuild vendor/*.tgz from arkade-os/ts-sdk@84267a3:
- fix(providers): don't send X-Build-Version to Esplora and indexer (CORS)

Provider HTTP headers only; the signer-rotation API and Contract type the
wallet uses are unchanged. Verified against the new build: tsc, build
(app + worker), 270 unit tests, and a frozen CI=true install all pass.

* chore: bump pinned ts-sdk ref to 6c86a52 (PR #554 latest)

Rebuild vendor/*.tgz from arkade-os/ts-sdk@6c86a52:
- fix(wallet): register baseline contracts under deprecated signers at boot
- test(e2e): isolate contract-params-change from leftover deprecated signers

The signer-rotation API and Contract type the wallet uses are unchanged.
Verified against the new build: tsc, build (app + worker), 270 unit tests,
and a frozen CI=true install all pass.

* chore: bump pinned ts-sdk ref to 41c8ee0 (PR #554 latest)

Rebuild vendor/*.tgz from arkade-os/ts-sdk@41c8ee0:
- fix(wallet): register boarding baseline contract under deprecated signers

The signer-rotation API and Contract type the wallet uses are unchanged.
Verified against the new build: tsc, build (app + worker), 270 unit tests,
and a frozen CI=true install all pass.

* feat(contracts): compact, searchable, filterable contracts list

Rework the dev-only Settings → Contracts screen to handle many contracts:

- Compact, collapsible rows (type · address · deprecated-signer badge ·
  state · age); tap to reveal address/script/parameters with copy actions.
- Active/Inactive tab, type-filter chips, and a search box (matches type,
  address, script, params).
- Virtualized list (@tanstack/react-virtual) with dynamic row heights and
  open-state kept in the parent so it survives rows scrolling out.
- Boarding contracts now show their on-chain Bitcoin Taproot address
  (bc1p/tb1p/bcrt1p), derived from the P2TR script, instead of the ark
  encoding.
- Per-section count.

Tests updated for the tabbed/filtered UI (virtualizer mocked under jsdom),
with added coverage for search, tab filtering, and the boarding address.

* feat(contracts): explorer links + compact filter bar

- Each contract's address links out to a block explorer: the Arkade
  explorer for ark addresses, the on-chain mempool explorer for boarding
  Bitcoin Taproot addresses (external-link icon on the expanded address row).
- Much more compact filter bar: a single-line search input and one wrapping
  chip row (Active/Inactive · type chips · count), replacing the tall search
  box and segmented control. Frees vertical space so the list no longer gets
  cut off at the bottom (also fixed the flexbox min-height:0 bound).
- Key the list/open-state by contract.script (the primary key) instead of
  address, which can collide across contracts (e.g. boarding) and made them
  expand together.

* fix(contracts): right-align the copy/explorer icons in expanded rows

The icon group was wrapped in a FlexRow, which defaults to width:100%, so
the icons left-aligned next to the value. Add `end` (width:undefined) so
the wrapper shrinks to its content and the row's space-between pushes it to
the right edge, matching the other copy rows.

* chore: bump pinned ts-sdk ref to 0e7378b (PR #554 latest)

Rebuild vendor/*.tgz from arkade-os/ts-sdk@0e7378b:
- fix(contractWatcher): recover promptly after subscription disruption (#564)
- merge master into the PR branch

The signer-rotation API and Contract type the wallet uses are unchanged.
Verified against the new build: tsc, build (app + worker), unit tests, and a
frozen CI=true install all pass.

* chore: bump pinned ts-sdk ref to 6c59b22 (PR #554 latest)

Rebuild vendor/*.tgz from arkade-os/ts-sdk@6c59b22. The new commits are
e2e/regtest/CI only (drive signer rotation through the regtest CLI,
run-on-all-PRs, regtest submodule bumps, merge #563) — no src changes,
so the SDK build is unchanged.

Verified against the new build: tsc, build (app + worker), unit tests, and a
frozen CI=true install all pass.

* chore: bump pinned ts-sdk ref to ac4d3a5 (X-Build-Version 0.9.9)

* fix(asp): show 'update your wallet' instead of 'server unreachable' on BUILD_VERSION_TOO_OLD

* chore(copy): use 'Arkade server' consistently (not 'Ark server')

* style: prettier-format asp.test.ts

* fix(asp): detect BUILD_VERSION_TOO_OLD against rc.1 (bump SDK 52236be)

arkd's guard interceptors run outside its error-detail converter, so the
REST rejection carries an empty details[] and the name only in the
message. Bump the vendored SDK to 52236be (maybeArkError message-prefix
fallback) and extract the min version from the message when metadata is
absent, so the wallet shows the outdated-client prompt instead of
'Arkade server unreachable'.

* style(asp): reword outdated-client message

* Upgrade ts-sdk 0.4.35 - boltz-swap 0.3.40

* chore: remove vendored SDK tarballs now that 0.4.35/0.3.40 are published

* Update lock file

* fix: use aspErrorText on all screens so outdated-wallet message shows consistently

* fix: react to aspInfo.outdated in error effects, add Chip keyboard a11y, drop orphaned SDK vendoring script

---------

Co-authored-by: Pietro Grandi <dev@pietro.uno>
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