Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
233 commits
Select commit Hold shift + click to select a range
4ca87e8
fix(rebalancer): resume in-flight runs before sizing a fresh one
ebma Sep 19, 2026
58fa8b0
feat(rebalancer): add reset script for a stuck USDC base state
ebma Sep 19, 2026
ef6cc3c
fix(rebalancer): keep dry-run read-only and read coverage before resu…
ebma Sep 19, 2026
aab69b8
docs(rebalancer): sequence the state reset after pausing the cron
ebma Sep 19, 2026
ed4f56c
fix(rebalancer): end the invocation when dry-run pauses an in-flight run
ebma Sep 19, 2026
c290abd
fix(rebalancer): skip the off-mode balance read and test the cycle
ebma Sep 19, 2026
fe8d8b3
Merge pull request #1382 from pendulum-chain/fix/rebalancer-resume-in…
ebma Sep 19, 2026
a997fec
fix(shared): log Squidrouter error status and raw non-JSON body
ebma Sep 20, 2026
76fa569
fix(shared): retry Squidrouter route requests on gateway 5xx
ebma Sep 20, 2026
562abf4
fix(shared): keep the Squidrouter status when the error body cannot b…
ebma Sep 20, 2026
c2e894f
docs(repo): document the Squidrouter gateway 5xx retry in the securit…
ebma Sep 20, 2026
f8c6c61
docs(repo): align the Squid audit checklist with the single-retry con…
ebma Sep 20, 2026
0f77e06
Merge pull request #1383 from pendulum-chain/fix/squidrouter-gateway-…
ebma Sep 20, 2026
57ad76c
fix(rebalancer): drop the redundant husky prepare hook
ebma Sep 29, 2026
ab8afd5
Merge pull request #1385 from pendulum-chain/fix/rebalancer-husky-pre…
ebma Sep 29, 2026
bec6979
fix(sdk): map the api invalid pixKey message to InvalidPixKeyError
ebma Sep 29, 2026
4038d20
fix(api): apply the SELL release gate to the ramp status response
ebma Sep 29, 2026
ad8870c
Merge pull request #1386 from pendulum-chain/fix/sdk-invalid-pixkey-m…
ebma Sep 29, 2026
30ca30d
test(repo): run the gold app tests from the root test script
alexatsatoshi Sep 29, 2026
a1f95b4
fix(frontend): restore gold security headers lost in the netlify move
alexatsatoshi Sep 25, 2026
39cf116
perf(gold): serve the landing image as webp and shrink the wordmark
alexatsatoshi Sep 25, 2026
0a457a6
fix(gold): show a year of prices under 1A and each period's change
alexatsatoshi Sep 25, 2026
0fc26af
fix(gold): keep tracking a ramp through transient status errors
alexatsatoshi Sep 25, 2026
9aac903
fix(gold): count the pix deadline down from the clock
alexatsatoshi Sep 25, 2026
2fc5466
fix(gold): link the terms and privacy policy accepted at login
alexatsatoshi Sep 25, 2026
8080fca
fix(gold): raise legal and fee note contrast to wcag aa
alexatsatoshi Sep 25, 2026
f619dbd
fix(gold): read kyc readiness from the user's own avenia account
alexatsatoshi Sep 25, 2026
97548b2
fix(gold): resume a sell with the ramp's unsigned wallet transactions
alexatsatoshi Sep 25, 2026
8eef3db
fix(gold): stop abandoned ramps from blocking new operations
alexatsatoshi Sep 25, 2026
8a5c90e
fix(gold): count a resumed pix down to its real start deadline
alexatsatoshi Sep 25, 2026
8a0cf4a
fix(gold): request the e-mail code in brazilian portuguese
alexatsatoshi Sep 25, 2026
0f025e0
fix(gold): keep the vortex session on transient refresh failures
alexatsatoshi Sep 25, 2026
aeb4b15
fix(gold): submit avenia kyc with the alpha-3 country code
alexatsatoshi Sep 25, 2026
2ef6986
docs(repo): list the gold node tests in the testing strategy
alexatsatoshi Sep 25, 2026
f12a756
feat(gold): skip the e-mail code while the vortex session is valid
alexatsatoshi Sep 25, 2026
0ed289e
perf(gold): drop the landing png that the webp replaced
alexatsatoshi Sep 29, 2026
2463f7f
fix(api): skip presign validation on BUY ramp status requests
ebma Sep 29, 2026
7cd2850
docs(api): document the dashboard route to API keys
ebma Sep 29, 2026
6215421
test(api): cover the dynamic presign branch of the status release gate
ebma Sep 29, 2026
7a1c116
docs(api): show bank transfer instructions from update, not start
ebma Sep 29, 2026
9b2491e
docs(sdk): read bank transfer instructions from the registered ramp
ebma Sep 29, 2026
4518e63
docs(api): add an own-account path for bots and treasury jobs
ebma Sep 29, 2026
7a93582
docs(api): list the ramp status values the API returns
ebma Sep 29, 2026
1f6704d
docs(repo): use current SDK names in the vortex-integration skill
ebma Sep 29, 2026
206a11f
docs(sdk): drop the payment partner's name from the README
ebma Sep 29, 2026
82cff92
fix(gold): lock the buy amount while its quote is prepared
ebma Sep 29, 2026
7953652
fix(gold): clear the previous step's error when going back
ebma Sep 29, 2026
eef5e57
ci(repo): run the gold app tests in the test job
ebma Sep 29, 2026
abee2f1
Merge pull request #1387 from pendulum-chain/fix/ramp-status-release-…
ebma Sep 29, 2026
8d2b857
docs(api): state EUR availability once and name the provider neutrally
ebma Sep 29, 2026
70da011
docs(sdk): name the EUR provider neutrally in the README
ebma Sep 29, 2026
4435e36
docs(repo): align the integration skill with EUR availability
ebma Sep 29, 2026
94ed2d6
fix(gold): keep failed operations in the history with their code
ebma Sep 29, 2026
1a0d846
fix(gold): point the price change arrow down when the price fell
ebma Sep 29, 2026
14812f7
fix(gold): refuse wallet transactions that are not the quoted sell
ebma Sep 29, 2026
082d0fe
fix(gold): never broadcast a sell after its start window closed
ebma Sep 29, 2026
89a46d7
fix(shared): retry the Squid token list after a failed load
ebma Sep 29, 2026
ee0fc25
fix(api): retry the Squid token list in the background at boot
ebma Sep 29, 2026
9c1de90
docs(api): record the token-registry retry invariant in the Squid spec
ebma Sep 29, 2026
718e64c
docs(api): mark business EUR accounts as sandbox-only for now
ebma Sep 29, 2026
5120486
fix(gold): keep polling kyc through blips and restart expired attempts
ebma Sep 29, 2026
93be7a7
fix(gold): check the cpf digits before starting kyc
ebma Sep 29, 2026
4cc445c
fix(gold): delete a ramp's ephemeral keys once it completed
ebma Sep 29, 2026
c1a152d
fix(api): validate createSubaccount name and tax id before any provid…
ebma Sep 29, 2026
d768185
perf(gold): render the landing before privy has loaded
ebma Sep 29, 2026
d63c1a7
fix(api): bind KYC and KYB submissions to the tax id claimed for the …
ebma Sep 29, 2026
a61b9c1
feat(api): add recoverFundedSellRamp for SELL ramps with a reported s…
ebma Sep 29, 2026
e8a13b5
docs(api): complete the own-account setup and signing steps
ebma Sep 29, 2026
9c12a05
docs(sdk): mark EUR buy as post-0.9.0 and add payout accounts first
ebma Sep 29, 2026
b1f3eff
fix(api): start funded SELL ramps from the recovery worker
ebma Sep 29, 2026
6b28050
docs(api): document worker-driven start of funded SELL ramps
ebma Sep 29, 2026
5818947
docs(api): route the EUR permit by its signer in the own-account path
ebma Sep 29, 2026
d85e1b1
docs(repo): give the skill's sell recipe a sell quote and payout guard
ebma Sep 29, 2026
d8af303
fix(api): limit probes of other profiles' tax ids on the brl routes
ebma Sep 29, 2026
08c440b
docs(api): document createSubaccount validation, tax id binding and t…
ebma Sep 29, 2026
15f37c7
docs(repo): add operator runbook for releasing a squatted BRL tax id
ebma Sep 29, 2026
23dbb98
docs(repo): sync the security spec with the tax-id claim guards
ebma Sep 29, 2026
be9b040
docs(api): pass the DomesticCountry enum in payout-account lookups
ebma Sep 29, 2026
58a0713
docs(sdk): note EUR is sandbox-only next to the SDK version requirement
ebma Sep 29, 2026
68ca928
Merge pull request #1389 from pendulum-chain/docs/api-dashboard-keys-…
ebma Sep 29, 2026
37cb4de
fix(frontend): never broadcast a sell after its start window closed
ebma Sep 29, 2026
6d1a0cf
fix(frontend): tell the user an expired sale sent nothing
ebma Sep 29, 2026
d254a5e
docs(frontend): document the sell start-deadline broadcast guard
ebma Sep 29, 2026
f915754
Merge pull request #1393 from pendulum-chain/fix/sell-start-deadline-…
ebma Sep 30, 2026
caa21cb
Merge pull request #1388 from pendulum-chain/fix/gold-review
ebma Sep 30, 2026
9de1835
fix(gold): keep focus in the field while the app refreshes
ebma Sep 30, 2026
551fe80
fix(gold): drop a kyc answer that arrives after the modal closed
ebma Sep 30, 2026
8ab5ee4
fix(gold): explain kyc status and resubmit failures in portuguese
ebma Sep 30, 2026
dc23f07
fix(gold): correct the kyc rejection copy
ebma Sep 30, 2026
fcacb56
fix(gold): show the kyc outcome where the user is looking
ebma Sep 30, 2026
1beff5e
fix(gold): reject run cpfs and tie the cpf error to its field
ebma Sep 30, 2026
70200ae
fix(gold): wait for privy on the google return and explain a failed load
ebma Sep 30, 2026
59147ba
fix(gold): close the ramp key store when a write fails
ebma Sep 30, 2026
8328767
revert(api): drop the distinct tax id limiter from the brl routes
ebma Sep 30, 2026
71743d5
docs(api): drop the 429 tax id limit from the brl operations
ebma Sep 30, 2026
f29ac8e
docs(repo): drop the tax id limiter from the spec and narrow invarian…
ebma Sep 30, 2026
309f48c
Merge remote-tracking branch 'origin/staging' into fix/api-recover-fu…
ebma Oct 1, 2026
4ba3461
test(api): bracket funded sell cutoffs between the clock reads
ebma Oct 1, 2026
12288e0
fix(api): exclude assethub sells from funded sell recovery
ebma Oct 1, 2026
8c3bd44
fix(api): count failed recovery attempts in the worker summary
ebma Oct 1, 2026
c682747
fix(api): send avenia the trimmed subaccount name
ebma Oct 1, 2026
39e4226
Merge pull request #1391 from pendulum-chain/fix/api-squid-token-list…
ebma Oct 1, 2026
591d11f
Merge pull request #1392 from pendulum-chain/fix/gold-followups
ebma Oct 1, 2026
6323d4d
chore(repo): remove applied one-off root scripts
ebma Oct 1, 2026
8889fc0
chore(repo): drop unused @packages tsconfig path alias
ebma Oct 1, 2026
b3edbce
ci(repo): drop the unused node-version matrix
ebma Oct 1, 2026
71ec2a2
chore(repo): remove relayer test:local script for a missing file
ebma Oct 1, 2026
736d78c
chore(rebalancer): remove unused Pendulum GraphQL indexer stack
ebma Oct 1, 2026
44de0d6
chore(rebalancer): remove the legacy brla-to-axlusdc flow
ebma Oct 1, 2026
2ca52e7
chore(shared): remove squidrouter helpers only the legacy rebalancer …
ebma Oct 1, 2026
3be29ec
chore(shared): remove dead XCM and substrate event code
ebma Oct 1, 2026
f95da92
refactor(rebalancer): drop unused compareRates and daily swap limit g…
ebma Oct 1, 2026
a83793b
refactor(rebalancer): share Base balance reads and Nabla config acros…
ebma Oct 1, 2026
2271248
refactor(rebalancer): extract the Nabla approve-then-swap send
ebma Oct 1, 2026
16a51f7
refactor(rebalancer): unify the Base flow state managers
ebma Oct 1, 2026
fcea6e5
refactor(rebalancer): inline the constant-argument amount policy
ebma Oct 1, 2026
7ee2ced
refactor(rebalancer): build the cost policy decision from shared fields
ebma Oct 1, 2026
e58c575
refactor(rebalancer): inline single-use daily limit wrappers
ebma Oct 1, 2026
ee26aab
chore(sdk): remove unused dev scripts and the prettier format script
ebma Oct 1, 2026
ee2bb45
test(sdk): characterize the requests ApiService sends
ebma Oct 1, 2026
9e7b154
refactor(sdk): route ApiService calls through one request helper
ebma Oct 1, 2026
130c6a2
test(sdk): characterize the BRL, domestic and EUR handler flows
ebma Oct 1, 2026
df09514
refactor(sdk): share the handler register and update flows
ebma Oct 1, 2026
3febad8
refactor(shared): build evm token entries with one helper
ebma Oct 1, 2026
9522710
chore(sdk): drop the unused stellar-sdk peer dependency
ebma Oct 1, 2026
3f4cd37
chore(shared): remove unused dependencies and tooling
ebma Oct 1, 2026
01b32f9
chore(api): remove unmounted subsidize, fundEphemeral and execute-xcm…
ebma Oct 1, 2026
37df9f2
chore(api): remove retired legacy-schema one-off scripts
ebma Oct 1, 2026
5487441
chore(api): remove orphaned files and the missing phase-metadata seed…
ebma Oct 1, 2026
080c814
chore(api): remove dead Hydration swap code and its SDK dependencies
ebma Oct 1, 2026
42d81bf
refactor(api): share one UUID_PATTERN across validators
ebma Oct 1, 2026
b554440
refactor(api): share one phase-to-transaction-status mapper
ebma Oct 1, 2026
64e5a9e
refactor(api): drop never-called stop() methods from workers
ebma Oct 1, 2026
aa48057
refactor(api): remove unused MaintenanceService schedule CRUD methods
ebma Oct 1, 2026
ce98dac
refactor(api): reuse shared Big helpers instead of local copies
ebma Oct 1, 2026
2c78517
chore(api): remove unused constants and config fields
ebma Oct 1, 2026
4c3b978
refactor(api): remove unused BaseRampService updateRampState and isQu…
ebma Oct 1, 2026
107f56a
refactor(api): merge ExtendableError into APIError
ebma Oct 1, 2026
834c085
refactor(api): drop the dead abort controller in webhook delivery
ebma Oct 1, 2026
7754567
refactor(api): remove unused spreadsheet service object, getUserProfi…
ebma Oct 1, 2026
4012b08
refactor(api): use crypto.randomUUID instead of the uuid package
ebma Oct 1, 2026
f80231c
refactor(api): drop the dead express-validation error branch and depe…
ebma Oct 1, 2026
5633038
chore(api): drop unused dependencies
ebma Oct 1, 2026
bd0dfe4
refactor(api): share one sendError helper for the error envelope
ebma Oct 1, 2026
bffaa07
refactor(api): build adminAuth and metricsDashboardAuth from one factory
ebma Oct 1, 2026
74fb6a3
refactor(api): collapse competitor price adapters to one file each
ebma Oct 1, 2026
abdac4c
refactor(dashboard): remove unused shadcn component exports
ebma Oct 1, 2026
11ecdbe
refactor(dashboard): drop the client-mocked notifications feed
ebma Oct 1, 2026
f00fee5
refactor(shared): share decodeJwtExpiryMs between frontend and dashboard
ebma Oct 1, 2026
f28257d
refactor(dashboard): drop legacy impersonation and transfer-state sto…
ebma Oct 1, 2026
7fb7e6a
refactor(dashboard): share the alfredpay document drop zone
ebma Oct 1, 2026
b9b280f
refactor(dashboard): share one onboarding TextField
ebma Oct 1, 2026
c122b5d
refactor(dashboard): derive corridor mappings from @vortexfi/shared
ebma Oct 1, 2026
f712084
refactor(dashboard): drop the always-false corridor flags
ebma Oct 1, 2026
ee96a0c
chore(gold): remove unused gold bar images
ebma Oct 1, 2026
c95f48d
chore(demo): remove the unused barrel and bscNetwork export
ebma Oct 1, 2026
c7c9c65
refactor(api): remove unreferenced block core helpers and handler met…
ebma Oct 1, 2026
f556744
refactor(api): delete inert and unregistered post-process handlers
ebma Oct 1, 2026
5a94ec6
refactor(api): drop unused StateMetadata fields
ebma Oct 1, 2026
83af011
refactor(api): share the EVM top-up between pre- and post-swap subsidies
ebma Oct 1, 2026
d0b381c
chore(frontend): remove components and hooks nothing imports
ebma Oct 1, 2026
fbe79e9
chore(frontend): remove unreferenced hooks, helpers and constants
ebma Oct 1, 2026
15ebac8
refactor(frontend): drop unused API client classes and methods
ebma Oct 1, 2026
10b0ec2
refactor(frontend): remove never-emitted events and unused store members
ebma Oct 1, 2026
ac15b43
refactor(frontend): drop leftover Nabla/solang helpers and unused config
ebma Oct 1, 2026
28275a3
refactor(frontend): reduce useLocalStorage to what its callers use
ebma Oct 1, 2026
fc63943
refactor(frontend): share createQuotePayload with the url params hook
ebma Oct 1, 2026
39e1adf
refactor(frontend): derive the ramp component from the active screen
ebma Oct 1, 2026
dda4f3f
refactor(frontend): remove dead ramp machine branches and context fields
ebma Oct 1, 2026
7bf992c
chore(frontend): remove unused translation keys
ebma Oct 1, 2026
5668c7d
chore(frontend): remove unreferenced assets
ebma Oct 1, 2026
e73db1f
refactor(frontend): validate the rating address with viem and drop web3
ebma Oct 1, 2026
8467394
refactor(frontend): use heroicons in the select and drop lucide-react
ebma Oct 1, 2026
800fa13
chore(frontend): drop dependencies nothing imports
ebma Oct 1, 2026
30d2e1c
chore(frontend): drop the dead shared alias from the vite config
ebma Oct 1, 2026
5e50907
chore(frontend): drop transitive @polkadot declarations
ebma Oct 1, 2026
f7569a0
chore(shared): remove types and ABI export orphaned by deleted legacy…
ebma Oct 1, 2026
1aa30da
refactor(api): import multiplyByPowerOfTen from shared in phases
ebma Oct 1, 2026
fa8f379
chore(repo): drop stellar-sdk, root big.js and unused catalog entries
ebma Oct 1, 2026
5776460
docs(dashboard): drop a comment pointing at a deleted frontend helper
ebma Oct 1, 2026
20d6f88
fix(frontend): poll the maintenance status from the layout again
ebma Oct 2, 2026
54d2912
fix(frontend): refetch the maintenance status on every poll
ebma Oct 5, 2026
b05595c
fix(frontend): lift the maintenance banner above the widget backdrop
ebma Oct 5, 2026
2a51fbc
feat(frontend): show the maintenance banner only in the widget
ebma Oct 5, 2026
3c478c9
feat(dashboard): show active maintenance windows in a banner
ebma Oct 5, 2026
54a527a
feat(dashboard): pause transfer actions during maintenance
ebma Oct 5, 2026
4de375f
feat(dashboard): say quotes are paused when they fail during maintenance
ebma Oct 5, 2026
3ab8583
fix(dashboard): refetch the maintenance status just after a window ends
ebma Oct 5, 2026
8148f0e
fix(dashboard): stop offramp signing once a maintenance window opens
ebma Oct 5, 2026
fe2df7b
fix(dashboard): keep senders from paying into a ramp paused by mainte…
ebma Oct 5, 2026
92e94d4
test(frontend): give e2e mock ramps an expiresAt for the sell deadlin…
ebma Oct 5, 2026
3b2f129
Merge pull request #1399 from pendulum-chain/fix/e2e-mock-ramp-expire…
ebma Oct 5, 2026
375dcf1
test(api): count only bearer auth's own log lines in its characteriza…
ebma Oct 5, 2026
cd1b22e
docs(shared): drop the deleted endpoint types from the wire-contract …
ebma Oct 5, 2026
93eeee2
docs(api): point stale security-spec lines at the code that enforces …
ebma Oct 5, 2026
932541e
Merge pull request #1397 from pendulum-chain/chore/repo-cleanup
ebma Oct 5, 2026
e4b3bb9
Merge pull request #1396 from pendulum-chain/fix/frontend-maintenance…
ebma Oct 5, 2026
83f7c67
fix(frontend): clear the maintenance store in tests with setState
ebma Oct 5, 2026
c243b16
Merge pull request #1400 from pendulum-chain/fix/frontend-maintenance…
ebma Oct 5, 2026
4a43c01
fix(dashboard): keep a broadcast offramp retryable when update or sta…
ebma Oct 5, 2026
2c2143d
feat(dashboard): let senders retry a stalled offramp before its start…
ebma Oct 5, 2026
7754147
test(dashboard): cover a post-broadcast offramp retry across a reload
ebma Oct 5, 2026
fb09b6c
docs(dashboard): document the offramp retry state and its recovery sn…
ebma Oct 5, 2026
8c8d2a7
Merge pull request #1398 from pendulum-chain/feat/dashboard-maintenan…
ebma Oct 5, 2026
481d0cc
refactor(dashboard): drop the unheard failure event and duplicate ret…
ebma Oct 5, 2026
700a8c2
ci(repo): snapshot the mounted API routes in the wire-contract gate
ebma Oct 5, 2026
80025f1
chore(repo): add the vortex-cleanup agent skill
ebma Oct 5, 2026
3301010
docs(repo): add a compatibility contract to the agent guidance
ebma Oct 5, 2026
34a7acf
Merge pull request #1402 from pendulum-chain/chore/compatibility-guar…
ebma Oct 5, 2026
ab92aea
fix(shared): retry rate-limited axelarscan status searches once
ebma Oct 6, 2026
9b7c81d
fix(api): search axelarscan once per squidRouterPay poll
ebma Oct 6, 2026
202e231
feat(shared): classify approved gmp calls the relayer never executed
ebma Oct 6, 2026
13f8b43
feat(api): execute approved gmp calls the axelar relayer never executed
ebma Oct 6, 2026
8f6c1e3
fix(shared): shorten the approved-gmp execute grace period to 2 minutes
ebma Oct 6, 2026
d2977a2
fix(api): execute approved gmp calls with the destination token symbol
ebma Oct 6, 2026
a2faa5d
test(api): cover the approved-gmp execute guard branches
ebma Oct 6, 2026
2cae3c5
Merge pull request #1403 from pendulum-chain/claude/blissful-swanson-…
ebma Oct 6, 2026
8f43ded
docs(api): describe the self-service sandbox and drop stale test acco…
ebma Oct 6, 2026
a69ed9b
Merge remote-tracking branch 'origin/staging' into fix/api-recover-fu…
ebma Oct 6, 2026
e12c2c7
Merge remote-tracking branch 'origin/staging' into fix/dashboard-offr…
ebma Oct 6, 2026
1287ce6
Merge pull request #1395 from pendulum-chain/fix/api-cpf-claim-guard
ebma Oct 6, 2026
3ea6d86
Merge pull request #1394 from pendulum-chain/fix/api-recover-funded-s…
ebma Oct 6, 2026
cd3bf9e
Merge pull request #1404 from pendulum-chain/docs/api-sandbox-self-se…
ebma Oct 6, 2026
49ad977
fix(dashboard): say when the api starts an expired offramp itself
ebma Oct 6, 2026
6939694
Merge pull request #1401 from pendulum-chain/fix/dashboard-offramp-po…
ebma Oct 6, 2026
d04e6a2
feat(rebalancer): cap USDC pool coverage for USDC->BRLA->USDC runs
ebma Oct 6, 2026
6994184
docs(rebalancer): document the USDC pool coverage cap
ebma Oct 6, 2026
33cafaa
fix(rebalancer): parse the USDC coverage cap strictly
ebma Oct 6, 2026
565a70a
docs(rebalancer): state that an unreadable USDC pool fails the run
ebma Oct 6, 2026
4e813bd
test(rebalancer): characterize the Base Nabla pool reads
ebma Oct 6, 2026
f865f62
feat(rebalancer): gate USDC->BRLA in the cycle and alert when blocked
ebma Oct 6, 2026
794cb63
docs(rebalancer): document the blocked USDC->BRLA alert
ebma Oct 6, 2026
b8b850b
Merge pull request #1405 from pendulum-chain/feat/rebalancer-usdc-cov…
ebma Oct 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .agents/skills/address-feedback/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ Run what the change touches:
- `bun typecheck`.
- Affected package/app test suites (commands in each subdirectory's CLAUDE.md).
- `bun run build:shared` when `packages/shared` changed, then re-run dependent suites.
- `bun run wire-contract:check` when shared endpoint types or the SDK surface changed;
- `bun run wire-contract:check` when shared endpoint types, the SDK surface, or API routes changed;
if the change is intentional, `bun run wire-contract:update` and commit the snapshot
diff with an explicit note on backward compatibility.

Expand Down
83 changes: 83 additions & 0 deletions .agents/skills/vortex-cleanup/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
---
name: vortex-cleanup
description: Rules and procedure for over-engineering cleanups in this repository, such as ponytail audits and reviews (/ponytail:ponytail-audit, /ponytail:ponytail-review), dead-code and unused-dependency removal, and simplifying refactors. Use before auditing or applying any cleanup, so the run respects the Compatibility Contract and the scope decisions already made.
---

# Vortex cleanup rules

Cleanup runs here follow the root `CLAUDE.md` **Compatibility Contract** first. The ponytail
plugin decides *what* looks over-engineered; this skill decides what may actually change
and how to prove nothing broke. When the two disagree, the contract wins.

## Scope decisions (do not propose these again without new information)

Excluded from cleanups by Marcel on 2026-10-01:

- Duplicate ABI files (`apps/api/src/contracts`, `apps/frontend/src/contracts`,
`packages/shared/src/contracts`) and swaps to viem's `erc20Abi`.
- Storybook (`apps/frontend/.storybook`, `*.stories.tsx`), and any component a story
imports.
- The retired BRL↔AssetHub flows, the phases only they use, and their substrate branches.
- Generic `packages/shared` shrinking: endpoint placeholders, twin helpers, dead DTO types.
- The rebalancer's BlindPay shadow quotes, and gold demo mode.
- Hand-rolled sleeps and IP-range checks (stdlib/`node:net` swaps).

Kept by the Compatibility Contract: mounted endpoints that nothing in this repo calls
(`/v1/siwe`, `/v1/storage`, `GET /v1/prices`), because external partners may call them.

Deferred because the swap changes behaviour; each needs an explicit decision and a
migration plan, not a cleanup commit:

- `body-parser` → `express.json()`: body-parser 2 leaves `req.body` undefined when nothing
was parsed.
- `joi` → zod: the email validation regexes differ.
- `method-override`: live, it honours `X-HTTP-Method-Override`.
- `dotenv`: the api also loads `../.env`; Bun only auto-loads from the working directory.
- ethers/siwe → viem: signed-transaction parsing and the SIWE nonce format.
- The swc build step: the Render start command depends on it.
- SDK ESLint → Biome: it enforces `.js` import extensions in the published ESM.
- node-forge → `node:crypto` for BRLA signing: node:crypto rejects PEM spellings forge
accepts, and the production key format is unverified.
- react-toastify → sonner, removing `input-otp`: UX changes.

## Procedure

1. **Base and isolation.** Work from `origin/staging` in a worktree. Re-check every finding
against the latest `staging` before integrating: staging can start using something you
deleted as dead.
2. **Audit.** Partition by workspace. Every delegated agent gets the Compatibility Contract
and this skill's scope table in its prompt: built-in Explore/Plan subagents do not load
`CLAUDE.md`. Finder-style passes can use the cheap tier (Claude Code: `sonnet`; Codex:
GPT-5.6-Luna); agents that edit code use the strong tier (Claude Code: session model;
Codex: GPT-5.6-Sol).
3. **Prove "dead" before deleting.** Zero references across `apps/`, `packages/`,
`contracts/`, `scripts/`, CI workflows, and package.json scripts. Include barrels,
string-keyed and dynamic use, lazy imports, TanStack file routes, dynamic i18n keys,
tsconfig `types`, side-effect imports, and stories. Usage only by tests means the
test usage goes too, never that the code is live.
4. **Dependencies.** Check imports, config files, CLI use in scripts, and peer requirements.
The frontend bundles `packages/shared` from source through its browser export, so
anything shared imports must stay resolvable from the frontend. The `bun.lock` diff may
only remove packages or move hoisting, never shift a consumer's resolved version.
5. **Refactors.** Characterization tests against the old code come first and stay. Keep
message strings, state keys, attempt classes, and log semantics that recovery or
operators rely on. If the result isn't smaller, or equivalence is uncertain, skip it
and say why. Skipping is fine; a silent behaviour change is not.
6. **Gates.** Before handing off:
- `bun run typecheck`, `bun run verify`, `bun run wire-contract:check`.
- The affected test suites. API tests need their own database: create
`vortex_test_<name>` on `localhost:54329` and run with `TEST_DB_NAME`. The dashboard
uses `bun run test`, since plain `bun test` picks up its Playwright specs.
- `bun run build` for every affected app.
- Any change to the wire-contract snapshot needs a compatibility note in the PR.
7. **Commits and PR.** One conventional commit per concern, with tests in the same
commit, grouped by workspace. The PR targets `staging` and lists what was kept or
skipped and why.

## Running parallel workstreams

- Install with Bun's global cache (`bun install --frozen-lockfile`). Per-worktree caches
from `bun bootstrap:worktree` filled the disk when seven agents ran at once.
- Give each workstream exclusive ownership of the `package.json` files it edits. When
integrating by cherry-pick, resolve `bun.lock` conflicts by keeping the integration
side and re-running `bun install`.
Loading
Loading