Commit graph

598 commits

Author SHA1 Message Date
openhands
36c798605f fix: feat: Add sell KRK widget to get-krk page (#456)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 12:03:36 +00:00
johba
466e0d7767 Merge pull request 'fix: evaluator: add market simulation and recenter helpers (#455)' (#457) from fix/issue-455 into master 2026-03-05 12:51:29 +01:00
openhands
9cda5beb4a fix: address review findings in market and recenter helpers
- recenter.ts: parse isUp from Recentered event logs instead of a
  follow-up eth_call that would decode wrong post-recenter state
- recenter.ts: remove hardcoded private key from comment; add blocks>0
  guard in mineBlocks; call provider.destroy() to prevent leaked intervals
- market.ts: snapshot KRK balance before buy to compute krkBought as
  delta instead of cumulative total; call provider.destroy() on exit;
  remove unused withdraw entry from WETH_ABI

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 11:27:31 +00:00
johba
32b9d86f18 Merge pull request 'docs: clarify fees go to protocol treasury, not holders' (#453) from docs/fee-destination-clarity into master
Reviewed-on: https://codeberg.org/johba/harb/pulls/453
2026-03-05 12:03:01 +01:00
openhands
5c7b488753 docs: clarify fees go to protocol treasury, not holders
- Add Fee Destination section to PRODUCT-TRUTH.md
- Explicitly ban 'fees grow your KRK value' and 'auto-compounding' claims
- Clarify holder value comes from asymmetric slippage, not fee reinvestment
- Fix misleading 'floor always goes up if fee income exceeds sell pressure'
- Update ARCHITECTURE.md feeDestination annotation
2026-03-05 12:02:45 +01:00
openhands
1973ccf25b fix: evaluator: add market simulation and recenter helpers (#455)
- Export waitForReceipt from swap.ts so market.ts and recenter.ts can reuse it
- Add market.ts with roundTripSwap: direct-RPC buy+sell round-trip using ethers Wallet
- Add recenter.ts with triggerRecenter (calls LiquidityManager.recenter()) and mineBlocks (anvil_mine)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 10:52:28 +00:00
johba
4066ea6db4 Merge pull request 'feat(holdout): add passive-confidence/no-dilution scenario' (#437) from feat/holdout-no-dilution into master 2026-03-05 11:31:56 +01:00
openhands
9b321b6774 ci: retrigger 2026-03-05 08:41:22 +00:00
openhands
cd459bb9b0 fix: correct buyKrk call sites for new opts param, add eslint-disable for polling loop
- no-dilution.spec.ts: pass undefined for opts, screenshotPrefix as 4th arg
- swap.ts: add eslint-disable-next-line for eth_getFilterLogs polling delay
2026-03-05 05:53:19 +00:00
openhands
e6bd236bcc ci: retrigger 2026-03-05 05:51:08 +00:00
openhands
dca57738b7 ci: retrigger after Codeberg OAuth refresh 2026-03-05 05:51:08 +00:00
openhands
f214ac8587 fix: address PR #437 review findings
- Fix price impact formula: (10000n - ...) instead of (1n - ...)
- Extract ETH_AMOUNT constant in always-leave to avoid duplication
- Add screenshotPrefix param to buyKrk for unique screenshot paths
2026-03-05 05:51:08 +00:00
openhands
c25c757024 feat(holdout): add passive-confidence/no-dilution scenario
Verifies that passive holders are not diluted when new buyers enter.

- Two wallets (Anvil accounts 4 & 5) buy KRK sequentially
- First buyer's balance must remain unchanged after second buy
- Second buyer receives fewer tokens per ETH due to AMM price impact
- Tests core protocol invariant: holding KRK does not dilute position
2026-03-05 05:51:03 +00:00
johba
0f4d07a4b7 Merge pull request 'docs: add engineering principles to AGENTS.md' (#441) from docs/engineering-principles into master 2026-03-05 06:47:52 +01:00
johba
921dfdca55 Merge pull request 'Move holdout scenarios to separate repo' (#438) from feat/move-holdout-scenarios-to-separate-repo into master 2026-03-05 06:47:41 +01:00
openhands
ca2be4c4e9 ci: retrigger 2026-03-04 08:20:17 +00:00
openhands
92ede4c7b7 address review: clarify eth_newFilter is polling not subscription, acknowledge existing violations 2026-03-04 08:20:17 +00:00
openhands
b2bb28f1b9 ci: retrigger after git clone auth failure 2026-03-04 08:20:17 +00:00
openhands
7fc47d739a ci: retrigger 2026-03-04 08:20:11 +00:00
openhands
106521af2e ci: retrigger after Codeberg OAuth refresh 2026-03-04 08:20:11 +00:00
openhands
f6fe37dcc0 fix: address PR #438 review findings
- Fix HOLDOUT_SCENARIOS_DIR to use absolute path (resolves Playwright testDir issue)
- Remove dead SCENARIOS_DIR variable
- Replace fallback with explicit error in holdout.config.ts
- Add SSH key requirement comment
2026-03-04 08:20:11 +00:00
openhands
69f6a87e20 Move holdout scenarios to separate repo
- Updated holdout.config.ts to use HOLDOUT_SCENARIOS_DIR env var
- Modified evaluate.sh to clone harb-holdout-scenarios repo at runtime
- Deleted scripts/harb-evaluator/scenarios/ directory
- Added .holdout-scenarios/ to .gitignore
- Holdout scenarios are now cloned into .holdout-scenarios/ during evaluation
- This prevents dev-agent from seeing the holdout test set
2026-03-04 08:20:11 +00:00
johba
b2594a28b3 Merge pull request 'fix: lint: Ban waitForTimeout, setTimeout-as-delay, and fixed sleep patterns (#442)' (#443) from fix/issue-442 into master 2026-03-03 23:37:46 +01:00
openhands
2483630a2d fix: add eslint-disable for Promise+setTimeout in CollapseActive.vue (#442)
No push event exists for Ponder indexing completion; grandfathered with
justification comment per the no-fixed-delays rule exception policy.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 22:10:06 +00:00
openhands
0a15df2e01 ci: retrigger after infra failure 2026-03-03 22:00:44 +00:00
johba
05191bb15f Merge pull request 'feat(holdout): Add reasonable slippage assertion to always-leave scenario' (#436) from fix/holdout-slippage-check into master 2026-03-03 22:41:23 +01:00
johba
16abdcbefb fix: add RPC propagation delay after browser-initiated swap (#434)
After `buyKrk()` completes (swap widget returns to idle), the Anvil RPC may briefly return stale balance state. Adds 2s delay to ensure `getKrkBalance` reads post-swap state.

Without this fix, the holdout scenario reports identical KRK balance before and after swap despite the transaction succeeding (success toast visible).

Co-authored-by: openhands <openhands@all-hands.dev>
Reviewed-on: https://codeberg.org/johba/harb/pulls/434
2026-03-03 22:20:02 +01:00
openhands
748557bc83 fix: lint: Ban waitForTimeout, setTimeout-as-delay, and fixed sleep patterns (#442)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 20:58:01 +00:00
openhands
62eadd0c11 ci: retrigger after git clone auth failure 2026-03-03 20:58:01 +00:00
openhands
74a043262d feat(holdout): Add reasonable slippage assertion to always-leave scenario
- Modified sellAllKrk helper to return WETH delta received
- Added assertion: WETH received >= 90% of ETH spent (0.09 ETH minimum)
- Added log showing actual slippage percentage
- This proves 'always leave' with reasonable slippage, not just exit ability
2026-03-03 19:45:46 +00:00
johba
c9e84b2c34 Merge pull request 'fix: Double trigger of loadLiquidityStats on initial mount (#361)' (#433) from fix/issue-361 into master 2026-03-03 09:25:47 +01:00
openhands
5623768025 fix: Double trigger of loadLiquidityStats on initial mount (#361)
Remove redundant onMounted call that fired loadLiquidityStats() a second
time. The watch() with { immediate: true } already handles the initial
load and all subsequent dependency changes, making onMounted redundant.
Also remove now-unused onMounted import.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 07:52:02 +00:00
johba
5d1c715799 Merge pull request 'fix: Array.isArray slot0 fallback branch is unreachable dead code (#362)' (#432) from fix/issue-362 into master 2026-03-03 08:41:20 +01:00
openhands
feaa226f24 fix: Array.isArray slot0 fallback branch is unreachable dead code (#362) 2026-03-03 07:11:09 +00:00
johba
1f9d11d494 Merge pull request 'fix: Generic utilities (isRecord, coerceString, getErrorMessage, ensureAddress) have no shared home (#363)' (#429) from fix/issue-363 into master 2026-03-03 08:06:12 +01:00
openhands
46b154e6f9 ci: retrigger after infra failure 2026-03-03 06:32:49 +00:00
openhands
57f2057a4c fix: overlay @harb/utils into CI webapp container
The webapp-ci Docker image predates packages/utils. The e2e.yml webapp
service already overlays packages/web3 manually; add the same pattern
for packages/utils so Vite can resolve @harb/utils imports at runtime.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 06:21:22 +00:00
openhands
e866266511 fix: update CheatsView to import utilities from @harb/utils
isRecord, coerceString, getErrorMessage, ensureAddress were removed
from useSwapKrk.ts but CheatsView.vue still imported them from there.
Update CheatsView to import from @harb/utils directly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 05:54:29 +00:00
openhands
59ae30bb37 fix: Generic utilities (isRecord, coerceString, getErrorMessage, ensureAddress) have no shared home (#363)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 05:37:14 +00:00
johba
e53591de9d Merge pull request 'fix: services/txnBot missing from ARCHITECTURE.md directory map (#369)' (#428) from fix/issue-369 into master 2026-03-03 06:25:14 +01:00
openhands
6432c07b12 fix: correct txnBot description in ARCHITECTURE.md directory map 2026-03-03 04:56:40 +00:00
openhands
e77db6ee12 ci: retrigger after infra failure 2026-03-03 04:23:04 +00:00
openhands
57b256b7e0 fix: services/txnBot missing from ARCHITECTURE.md directory map (#369) 2026-03-03 04:11:08 +00:00
johba
83ebc2885d Merge pull request 'fix: Raw number rendering for taxPaidGes and profit after load (#375)' (#426) from fix/issue-375 into master 2026-03-03 05:01:33 +01:00
openhands
d00b78f338 fix: apply formatTokenAmount to Total row and guard against NaN/Infinity
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 03:32:06 +00:00
openhands
8f5910d30a fix: Raw number rendering for \taxPaidGes\ and \profit\ after load (#375)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 03:03:22 +00:00
johba
007a315f4f Merge pull request 'fix: loadActivePositionData has no error handling — silent failure on RPC error (#377)' (#423) from fix/issue-377 into master 2026-03-03 03:51:05 +01:00
openhands
f8baa02efc fix: hide stats on first-open error and guard Total row against undefined
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 02:23:06 +00:00
openhands
c0e1079006 fix: suppress no-console lint error in CollapseActive error handler
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 02:00:05 +00:00
openhands
8e600ec5fd fix: \loadActivePositionData\ has no error handling — silent failure on RPC error (#377)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 01:51:48 +00:00