Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
524 commits
Select commit Hold shift + click to select a range
da817e7
chore(audits): annotate completion status
Kelbie May 4, 2026
3e95b82
refactor(chat): collapse duplicate formatTimestamp into shared chat h…
Kelbie May 4, 2026
a4448f4
chore(audits): annotate completion status
Kelbie May 4, 2026
e2be9ac
refactor(nostr): centralise 64-char hex pubkey validation
Kelbie May 4, 2026
a885056
chore(audits): annotate completion status
Kelbie May 4, 2026
29cee9d
fix(mint): restore Nostr pills for npub-publishing mints; consolidate…
Kelbie May 4, 2026
1ac6b9c
chore(audits): annotate completion status
Kelbie May 4, 2026
dded751
fix(logs): drop payment-value previews and narrow raw error objects
Kelbie May 4, 2026
6330f22
chore(audits): annotate completion status
Kelbie May 4, 2026
8c9f087
fix(nfc): honor utf-16 ndef text records and isolate transceive error…
Kelbie May 4, 2026
6e456b8
chore(audits): annotate completion status
Kelbie May 4, 2026
fdc0e26
refactor(settings): extract SlideToConfirm primitive from DeleteScree…
Kelbie May 4, 2026
9970f1b
chore(audits): annotate completion status
Kelbie May 4, 2026
273d61e
refactor(bitchat): clean bitchat-module surface and rename overloaded…
Kelbie May 4, 2026
6a8a44d
chore(audits): annotate completion status
Kelbie May 4, 2026
a8a47da
fix(bitchat): preserve message history across dep churn and stop yank…
Kelbie May 4, 2026
594abde
chore(audits): annotate completion status
Kelbie May 4, 2026
5a1c68e
refactor(theme): break themeStore↔wallpaperStore cycle and drop vesti…
Kelbie May 4, 2026
02be659
chore(audits): annotate completion status
Kelbie May 4, 2026
1e5167b
refactor(feed): drop dead handlers, no-op actions ref, and timestamp-…
Kelbie May 4, 2026
6b8474a
chore(audits): annotate completion status
Kelbie May 4, 2026
47bba4b
refactor(feed): unify image-overlay worklet→JS API on scheduleOnRN an…
Kelbie May 4, 2026
0533834
chore(audits): annotate completion status
Kelbie May 4, 2026
38ab13f
refactor(whitenoise): drop AnimatedEmoji's Google CDN fetch and rende…
Kelbie May 4, 2026
c44af67
chore(audits): annotate completion status
Kelbie May 4, 2026
d24d2c8
fix(ai): scope useAiSend stream + balance to a hook controller
Kelbie May 4, 2026
ecb386f
chore(audits): annotate completion status
Kelbie May 4, 2026
6bcb596
refactor(popup): colocate engine and bridge into popups/ subfolder
Kelbie May 4, 2026
5384801
chore(audits): annotate completion status
Kelbie May 4, 2026
e9e8a9b
fix(whitenoise): zero nsec on dispose, consolidate provider seam
Kelbie May 4, 2026
4dbb1f0
chore(audits): annotate completion status
Kelbie May 4, 2026
72725a9
style(theme): drop hardcoded #3B82F6 in theme picker
Kelbie May 4, 2026
9da1284
chore(audits): annotate completion status
Kelbie May 4, 2026
db4a46b
fix(bitchat): platform-guard native require so Android boots
Kelbie May 4, 2026
e44c394
chore(audits): annotate completion status
Kelbie May 4, 2026
d11743a
chore(hygiene): drop unused openai SDK + dedupe polyfill imports
Kelbie May 4, 2026
0f91c65
chore(audits): annotate completion status
Kelbie May 4, 2026
504ea4a
fix(mint): make swapStatusStore the source of truth for rebalance toast
Kelbie May 4, 2026
8aa98ae
chore(audits): annotate completion status
Kelbie May 4, 2026
0d36402
refactor(mint): canonicalise the trust-and-add path
Kelbie May 4, 2026
f24ce49
chore(audits): annotate completion status
Kelbie May 4, 2026
533a0e5
refactor(chat): extract useChatSurfacePerfLogger to dedupe chat-surfa…
Kelbie May 4, 2026
4ac5e15
chore(audits): annotate completion status
Kelbie May 4, 2026
86c0a4a
fix(mint): bound the rebalance trust window so attacker mints can't l…
Kelbie May 4, 2026
630e94f
chore(audits): annotate completion status
Kelbie May 4, 2026
c87f80f
fix(settings): redact bearer instruments + geolocation from storage d…
Kelbie May 4, 2026
b1eae89
chore(audits): annotate completion status
Kelbie May 4, 2026
d1e3a0a
refactor(routstr): collapse store interface and stop double-persistin…
Kelbie May 4, 2026
eee17b1
chore(audits): annotate completion status
Kelbie May 4, 2026
487524d
fix(payments): keep swap-toast gate engaged on mid-flight dismissal a…
Kelbie May 4, 2026
5bc5523
chore(audits): annotate completion status
Kelbie May 4, 2026
be6e781
refactor(hygiene): consolidate brand colors and retire features/bitch…
Kelbie May 4, 2026
cbee813
chore(audits): annotate completion status
Kelbie May 4, 2026
dc03539
refactor(whitenoise): bound inbox cold-start fetch and silence setup …
Kelbie May 4, 2026
0eb0180
chore(audits): annotate completion status
Kelbie May 4, 2026
4bf501a
fix(wallet): close BitcoinNearYou location-leak privacy seam
Kelbie May 4, 2026
eac8a32
chore(audits): annotate completion status
Kelbie May 4, 2026
493ea50
refactor(ui): drop redundant React.memo wrappers on no-prop and pass-…
Kelbie May 4, 2026
38a9301
chore(audits): annotate completion status
Kelbie May 4, 2026
e739f16
fix(payments): wire mockFailMelt/mockFailSend through coco-payment-ux
Kelbie May 4, 2026
721563c
chore(audits): annotate completion status
Kelbie May 4, 2026
0afa616
refactor(feed): narrow image-overlay context surface
Kelbie May 4, 2026
e041569
chore(audits): annotate completion status
Kelbie May 4, 2026
bbac6c2
refactor(splitBill): consolidate participant status helpers
Kelbie May 4, 2026
979539d
chore(audits): annotate completion status
Kelbie May 4, 2026
ab19c27
refactor(stores): close profile-scoped persist hygiene gaps
Kelbie May 4, 2026
b9a8ccc
chore(audits): annotate completion status
Kelbie May 4, 2026
8e27239
refactor(payments): validate untrusted external strings at trust boun…
Kelbie May 4, 2026
88b8b01
chore(audits): annotate completion status
Kelbie May 4, 2026
c41295c
refactor(map): tighten expo-maps seam typing
Kelbie May 4, 2026
4764e98
chore(audits): annotate completion status
Kelbie May 4, 2026
62ed9d2
fix(settings): cross-platform key import + gate-mode popup leak
Kelbie May 5, 2026
21c7cdd
chore(audits): annotate completion status
Kelbie May 5, 2026
b6fa213
refactor(feed): bound untrusted relay content at the parser/payment seam
Kelbie May 5, 2026
288a974
chore(audits): annotate completion status
Kelbie May 5, 2026
d6a4720
refactor(ui): extract protocol-prefix display formatting from Details…
Kelbie May 5, 2026
de214b8
chore(audits): annotate completion status
Kelbie May 5, 2026
cdb5515
fix(wallet): restore MintSelector android resolution
Kelbie May 5, 2026
2b376e1
chore(audits): annotate completion status
Kelbie May 5, 2026
d27c831
perf(chat): stabilise chat-surface render lifecycle
Kelbie May 5, 2026
73c8a87
chore(audits): annotate completion status
Kelbie May 5, 2026
cd71082
fix(cashu): serialize manager init/cleanup via stored promises
Kelbie May 5, 2026
a213200
chore(audits): annotate completion status
Kelbie May 5, 2026
858cd89
refactor(map): split MapScreen orchestrator into camera + markers hooks
Kelbie May 5, 2026
02223b6
chore(audits): annotate completion status
Kelbie May 5, 2026
ea824d4
refactor(theme): migrate features/theme StyleSheet to uniwind className
Kelbie May 5, 2026
62bd79e
chore(audits): annotate completion status
Kelbie May 5, 2026
b6c9b53
fix(coco): close awaitRestoreReady race + re-init Coco on profile switch
Kelbie May 5, 2026
e81d6bd
chore(audits): annotate completion status
Kelbie May 5, 2026
27bec5d
fix(split-bill): reconcile payment state via coco events, not screen-…
Kelbie May 5, 2026
b524deb
chore(audits): annotate completion status
Kelbie May 5, 2026
ce3d02c
refactor(popups): delete 30 unused popup helpers and slim barrel
Kelbie May 5, 2026
c892e10
chore(audits): annotate completion status
Kelbie May 5, 2026
cad2951
perf(payments): stabilise relay-flush re-fire in contact-discovery hooks
Kelbie May 5, 2026
46217be
chore(audits): annotate completion status
Kelbie May 5, 2026
e56fd46
refactor(boot): move module-load initLog calls below imports
Kelbie May 5, 2026
8204702
chore(audits): annotate completion status
Kelbie May 5, 2026
7409349
refactor(logger): split god-module + close any-cast cleanup + cap aiL…
Kelbie May 5, 2026
71d50d4
chore(audits): annotate completion status
Kelbie May 5, 2026
91ae8cd
fix(btcmap): bound details cache, reset on wipe, raise cluster cache cap
Kelbie May 5, 2026
7b55efe
chore(audits): annotate completion status
Kelbie May 5, 2026
383ad95
refactor(contacts,feed): inline SEARCH_FILTERS_HEIGHT into filter com…
Kelbie May 5, 2026
cb7dc08
chore(audits): annotate completion status
Kelbie May 5, 2026
532d31c
feat(payments): carry recipientPubkey through chat send-money seam
Kelbie May 5, 2026
fe1151a
chore(audits): annotate completion status
Kelbie May 5, 2026
5bf7be6
refactor(brand-colors): consolidate raw '#F7931A' into BITCOIN_ACCENT…
Kelbie May 5, 2026
f21f049
chore(audits): annotate completion status
Kelbie May 5, 2026
c87c705
fix(popup): tint failed Menu rows + route reserved-proofs picker thro…
Kelbie May 5, 2026
26cea20
chore(audits): annotate completion status
Kelbie May 5, 2026
5506942
perf(memo): stabilize derived collections in mintSelect + split-bill …
Kelbie May 5, 2026
014ff18
chore(audits): annotate completion status
Kelbie May 5, 2026
349a81f
feat(a11y): close shared/ui a11y rollout punch list
Kelbie May 5, 2026
53efef3
chore(audits): annotate completion status
Kelbie May 5, 2026
62cbbe0
refactor(feed,user): lift useNostrProfile to shared/hooks
Kelbie May 5, 2026
223c64c
chore(audits): annotate completion status
Kelbie May 5, 2026
3417286
refactor(transactions): drop account JSON-blob route param
Kelbie May 5, 2026
a9b0e5a
chore(audits): annotate completion status
Kelbie May 5, 2026
d129b8e
refactor(chat): unify DM surfaces on shared bubble + header
Kelbie May 5, 2026
955b960
chore(audits): annotate completion status
Kelbie May 5, 2026
189f8f9
refactor(chat): extract ChatScreen wrapper to consolidate DM surfaces
Kelbie May 5, 2026
ebda6f6
chore(audits): annotate completion status
Kelbie May 5, 2026
21b422c
feat(chat): unify sending → sent delivery indicator across all surfaces
Kelbie May 5, 2026
e18b03a
feat(chat): liquid-glass composer for bitchat / nostr-DM / whitenoise
Kelbie May 5, 2026
c803c49
Revert "refactor(whitenoise): drop AnimatedEmoji's Google CDN fetch a…
Kelbie May 5, 2026
fe08b2c
fix(chat): liquid-glass composer morph animation + content-sized input
Kelbie May 5, 2026
8320968
fix(chat): wire animation modifier so the glass-morph actually animates
Kelbie May 5, 2026
8b8f68a
fix(chat): bouncy scale-in for send button via SwiftUI-side animation
Kelbie May 5, 2026
292e1eb
fix(chat): stop the glass shapes blending into one persistent blob
Kelbie May 5, 2026
a17160f
fix(chat): drop the press-glow on the composer glass buttons
Kelbie May 5, 2026
1591197
fix(chat): drop tints on the composer glass material
Kelbie May 5, 2026
f038ae7
fix(chat): single glass circle per button (drop double-ring on press)
Kelbie May 5, 2026
9a81bca
fix(chat): single-ring glass buttons that still animate
Kelbie May 5, 2026
7325c97
fix(chat): trust buttonStyle('glass') for animation; input is also a …
Kelbie May 5, 2026
d6bb1ce
Revert "fix(chat): trust buttonStyle('glass') for animation; input is…
Kelbie May 5, 2026
1f5e23d
feat(chat): input is also a glass button + 2pt more breathing room
Kelbie May 5, 2026
1811441
fix(chat): let taps in input padding reach the SwiftUI press animation
Kelbie May 5, 2026
cae747f
refactor(chat): SwiftUI TextField inside the liquid-glass composer bu…
Kelbie May 5, 2026
b067246
refactor(codereview): split lookalikes into its own module + scripts …
Kelbie May 5, 2026
b0ba7ba
feat(chat): migrate DM + AI surfaces to react-native-gifted-chat
Kelbie May 5, 2026
d1ce980
refactor(chat): collapse AI surface onto shared ChatScreen + Button c…
Kelbie May 5, 2026
ae0bdcc
chore(hygiene): delete dead exports flagged by knip
Kelbie May 6, 2026
41c9866
chore(audits): annotate completion status
Kelbie May 6, 2026
69a595b
fix(screens): resolve reported wallet issues
Kelbie May 8, 2026
1ba8b9a
fix(send): reuse payment guard for DM send money __research__
Kelbie May 8, 2026
d17107a
feat(ui): use mesh gradients for drawer surfaces
Kelbie May 8, 2026
f664a72
Style tab bar with theme colors and rounded corners
Kelbie May 8, 2026
0a7a2d6
style(ui): cohere wallet surfaces and fix Liquid Glass dispatch
Kelbie May 8, 2026
beb85ee
fix(ai): adapt composer bottom inset to tab-bar path
Kelbie May 8, 2026
9e26d0f
refactor(ui): introduce capability port + defineVariants plumbing
Kelbie May 9, 2026
851f163
refactor(ui): migrate CapsuleButton to defineVariants
Kelbie May 9, 2026
025ef69
refactor(ui): migrate BalancePill + FiatCurrencyPill to defineVariants
Kelbie May 9, 2026
ff6fb4d
refactor(ui): migrate CircleActionButton to defineVariants (selector …
Kelbie May 9, 2026
f08b3db
refactor(ui): adopt useCapabilities + useLiquidGlassModifiers at inli…
Kelbie May 9, 2026
aec70d8
refactor(ui): finish capability migration + document the rules
Kelbie May 9, 2026
ce85383
docs: relocate capability rules to __rules__/, wire CLAUDE.md
Kelbie May 9, 2026
f5f2420
docs(rules): add responsive-scaling rule
Kelbie May 9, 2026
5874a0d
perf(mint): add SWR cache above coco's mint-info HTTP refresh
Kelbie May 9, 2026
3500955
fix(splash): restore splash → QR morph and stop pre-mount native-spla…
Kelbie May 9, 2026
ef79f4b
refactor(mint): route audit-score derivation through transformAuditData
Kelbie May 9, 2026
a3ecb69
fix(codereview): track re-export edges and platform variants in analy…
Kelbie May 9, 2026
0ec1c05
refactor(hygiene): trim dead exports and dup re-exports
Kelbie May 9, 2026
2dd02c3
refactor(whitenoise): inline serialization helpers into single consumer
Kelbie May 9, 2026
e91bff7
refactor(codereview): break log-doctor static cycle via createRequire
Kelbie May 9, 2026
947dcfb
refactor(hygiene): trim unused exports + delete dead helper
Kelbie May 9, 2026
933601b
refactor(codereview): extract WDA primitives into wda.ts (real cycle …
Kelbie May 9, 2026
772c2f4
refactor(coco-payment-ux): group CocoPaymentUXProvider props by concern
Kelbie May 9, 2026
5e762cd
docs(coco-payment-ux): match grouped CocoPaymentUXProvider props
Kelbie May 9, 2026
3f94042
refactor(redux): inline deprecated action-type strings
Kelbie May 9, 2026
0423e38
refactor(popup): collapse per-domain popup catalog into the barrel
Kelbie May 9, 2026
1ab2937
refactor(feed): inline FeedFilters into FeedScreen
Kelbie May 9, 2026
6144105
refactor(nostr-cache): expose cache singletons instead of rebound met…
Kelbie May 9, 2026
a146f11
refactor(send): rename Sovran provider, drop redundant hook re-exports
Kelbie May 9, 2026
5cb7671
chore(codereview): exclude packages/*/lib build output from walks
Kelbie May 9, 2026
f3bfd3c
fix(codereview): correct re-export and aliased-import name extraction
Kelbie May 9, 2026
9a0f0f7
chore(structure): drop unused exports + resolve duplicate names
Kelbie May 9, 2026
315180c
chore(structure): kill duplicate export names, fix re-export classifier
Kelbie May 9, 2026
f50119e
chore(structure): delete dead code surfaced by knip + analyze-structure
Kelbie May 9, 2026
1064824
refactor(popup): collapse 58 named popup wrappers behind staticPopup/…
Kelbie May 9, 2026
b8ccd26
chore(audits): annotate completion status
Kelbie May 9, 2026
35c8416
refactor(feed): split nostr/shared.tsx kitchen-sink into 9 focused mo…
Kelbie May 9, 2026
fa91f3f
chore(audits): annotate completion status
Kelbie May 9, 2026
d7b9d60
refactor(mint): lift MintRebalancePlanScreen orchestration into useMi…
Kelbie May 9, 2026
091d014
chore(audits): annotate completion status
Kelbie May 9, 2026
b14bdb5
chore(codereview): exclude internal tooling from analyze-structure walk
Kelbie May 9, 2026
718d3a6
feat(transactions): add swipeable month pager to TransactionsScreen
Kelbie May 10, 2026
e33fbd5
refactor(date): consolidate to shared/lib/date.ts with locale-aware f…
Kelbie May 10, 2026
22c63ae
refactor(icons): add internal: namespace, share animated-status shapes
Kelbie May 10, 2026
3c5731d
refactor(ui): SelectableCheck primitive, fix split-bill picker re-render
Kelbie May 10, 2026
7580266
fix(theme): kill module-scope and hardcoded colors that survive theme…
Kelbie May 10, 2026
873085f
refactor(theme): introduce shared/styles/tokens.ts for non-color desi…
Kelbie May 10, 2026
874dbf6
refactor(theme): rename color-shaped variables to mirror semantic source
Kelbie May 10, 2026
906559f
feat(drawer): X-style header, flat surface, unified menu scrim
Kelbie May 10, 2026
4aa74bd
chore(lint): land type-aware typescript-eslint rules across full repo
Kelbie May 10, 2026
09890a8
chore(lint): ban hardcoded hex colors outside the canonical theme homes
Kelbie May 10, 2026
434cffc
chore(lint): ban raw console.* in favour of the scoped logger
Kelbie May 10, 2026
1465878
chore(lint): require fetchJson wrapper instead of raw fetch
Kelbie May 10, 2026
739e945
chore(lint): require formatDate over Date#toLocale*String
Kelbie May 10, 2026
88952c0
chore(lint): require openExternalUrl wrapper instead of raw Linking.o…
Kelbie May 10, 2026
634f6bf
chore(lint): ban legacy react-native Animated in favour of Reanimated v4
Kelbie May 10, 2026
b159603
chore(lint): ban borderWidth: 0.5; migrate the 4 existing call sites
Kelbie May 10, 2026
2fc684d
chore(lint): add eslint-plugin-react-compiler at warn level
Kelbie May 10, 2026
04605aa
chore(lint): add eslint-plugin-react-perf at warn level
Kelbie May 10, 2026
c71d396
chore(types): enable tsc noImplicitOverride
Kelbie May 10, 2026
e85aedb
chore(lint): round out the no-restricted-imports tap and clipboard bans
Kelbie May 10, 2026
bad0ae1
chore(knip): drop obsolete ignore entries and dead ignoreIssues overr…
Kelbie May 10, 2026
6f4f423
ci(structural-health): post analyze-structure --llm summary on PRs
Kelbie May 10, 2026
d01c9a2
chore(scripts): drop orphaned palette exploration scripts and JSON sn…
Kelbie May 10, 2026
e8ab80d
chore(audits): stop tracking __audits__ findings
Kelbie May 10, 2026
44425ce
docs(codereview): drop audit-status commit + force-add machinery
Kelbie May 11, 2026
ff9d4dd
chore(lint): clear 369 mechanical eslint suppressions (624 → 255)
Kelbie May 11, 2026
0ef81f7
fix(android): match iOS launcher icon (black S on white)
Kelbie May 11, 2026
d50b14f
fix(settings): point Contact the Developer at @SovranBitcoin
Kelbie May 11, 2026
f487671
fix(mint-select): unblock Select Mint open and restyle inspect button
Kelbie May 11, 2026
4c576b7
fix(wallet): add spacer between pending and confirmed transaction sec…
Kelbie May 11, 2026
8868f0d
fix(buttons): let bottom button row size as flex | flex | fixed
Kelbie May 11, 2026
f27222f
fix(theme): download wallpaper before flipping themeStore on apply
Kelbie May 11, 2026
cbcd07b
fix(contacts): show reputation + followers on search rows via schemas v2
Kelbie May 11, 2026
a9548f8
search fixes.
Kelbie May 11, 2026
5a676b4
fix(deeplinks): broaden URI ingress to match Minibits/Macadamia coverage
Kelbie May 11, 2026
67d685e
fix(theme): center status pill on wallpaper preview cards
Kelbie May 11, 2026
8b16e5b
fix(npc): switch NPubCash host from npubx.cash to npub.cash
Kelbie May 11, 2026
25d8a81
fix(secure-store): drop biometric requirement to stop FaceID cascades…
Kelbie May 11, 2026
8fb0ec6
fix(popup): stack "Choose how to pay" above the camera route modal
Kelbie May 11, 2026
086fa37
fix(npc): mirror eNuts host + durable since-cursor + real claim flow
Kelbie May 11, 2026
4c07290
fix(ai): port chat to LegendList to bypass iOS 26 FlatList dim
Kelbie May 11, 2026
8bf317e
fix(ai): drop chrome changes bundled into LegendList port
Kelbie May 11, 2026
e9e0ce0
feat(ai): tile pattern wallpaper behind chat surface
Kelbie May 12, 2026
7a86e8f
fix(wallet): align fiat pill chrome with CircleActionButton family
Kelbie May 12, 2026
6a2ceb4
feat(theme): light theme support across chrome and content
Kelbie May 12, 2026
99eed5f
fix(theme): light-mode polish for QR card, bitcoin disc, and receive …
Kelbie May 12, 2026
a491da7
feat(drawer): rounded scene edge with theme-aware hairline outline
Kelbie May 12, 2026
6330456
feat(theme): retint success + green consumers to blue, neutral fiat pill
Kelbie May 12, 2026
1cea90d
fix(offline): retint YOU ARE OFFLINE banner to blue
Kelbie May 12, 2026
890d169
feat(drawer): device-radius scene corners, toggle haptics, wider swip…
Kelbie May 12, 2026
962151e
fix(chat): unify keyboard-lift math across AI tab and modal-stack chats
Kelbie May 12, 2026
1c825ff
refactor(chat): migrate DM surfaces to LegendList, fix iOS 26 keyboar…
Kelbie May 12, 2026
0fd9e88
refactor(crypto): drop local nutpatch package, depend on published nu…
Kelbie May 12, 2026
9fef8e2
fix(theme): retint success/done surfaces from blue back to green
Kelbie May 14, 2026
adfca41
feat(send): resolve recipient identity (NIP-05 + profile) in payment …
Kelbie May 14, 2026
d05176f
refactor(bitchat): rewrite BLE bridge + add DM message store and deli…
Kelbie May 14, 2026
75c1093
feat(chat): extend delivery vocabulary to delivered/failed + avatar s…
Kelbie May 14, 2026
478731c
feat(wallet): pull-to-AI refresh, currency-swapper pill, tab-bar pres…
Kelbie May 14, 2026
05dee3b
feat(contacts): surface BitChat BLE peers and seed mock contacts in d…
Kelbie May 14, 2026
9284b06
fix(mint): snappier info reveal + custom green OK badge
Kelbie May 14, 2026
a1b9ecf
chore: drop unused react-native-gifted-chat patch
Kelbie May 14, 2026
8ae15e4
test(coco-payment-ux): cover recipient identity enrichment
Kelbie May 14, 2026
c6a31b4
feat(mint): rework balance-split footer with Split/Reset/Focus actions
Kelbie May 14, 2026
b0b86dd
fix(nav): defer AI pull shortcut until release
Kelbie May 14, 2026
9cf8bf9
fix(contacts): gate white noise behind developer toggle
Kelbie May 14, 2026
0704f2b
fix(bitchat): scope BLE and Nostr identity to active profile
Kelbie May 14, 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
  •  
  •  
  •  
49 changes: 49 additions & 0 deletions .agents/skills/caveman/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
---
name: caveman
description: >
Ultra-compressed communication mode. Cuts token usage ~75% by dropping
filler, articles, and pleasantries while keeping full technical accuracy.
Use when user says "caveman mode", "talk like caveman", "use caveman",
"less tokens", "be brief", or invokes /caveman.
---

Respond terse like smart caveman. All technical substance stay. Only fluff die.

## Persistence

ACTIVE EVERY RESPONSE once triggered. No revert after many turns. No filler drift. Still active if unsure. Off only when user says "stop caveman" or "normal mode".

## Rules

Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). Abbreviate common terms (DB/auth/config/req/res/fn/impl). Strip conjunctions. Use arrows for causality (X -> Y). One word when one word enough.

Technical terms stay exact. Code blocks unchanged. Errors quoted exact.

Pattern: `[thing] [action] [reason]. [next step].`

Not: "Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by..."
Yes: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:"

### Examples

**"Why React component re-render?"**

> Inline obj prop -> new ref -> re-render. `useMemo`.

**"Explain database connection pooling."**

> Pool = reuse DB conn. Skip handshake -> fast under load.

## Auto-Clarity Exception

Drop caveman temporarily for: security warnings, irreversible action confirmations, multi-step sequences where fragment order risks misread, user asks to clarify or repeats question. Resume caveman after clear part done.

Example -- destructive op:

> **Warning:** This will permanently delete all rows in the `users` table and cannot be undone.
>
> ```sql
> DROP TABLE users;
> ```
>
> Caveman resume. Verify backup exist first.
117 changes: 117 additions & 0 deletions .agents/skills/diagnose/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
---
name: diagnose
description: Disciplined diagnosis loop for hard bugs and performance regressions. Reproduce → minimise → hypothesise → instrument → fix → regression-test. Use when user says "diagnose this" / "debug this", reports a bug, says something is broken/throwing/failing, or describes a performance regression.
---

# Diagnose

A discipline for hard bugs. Skip phases only when explicitly justified.

When exploring the codebase, use the project's domain glossary to get a clear mental model of the relevant modules, and check ADRs in the area you're touching.

## Phase 1 — Build a feedback loop

**This is the skill.** Everything else is mechanical. If you have a fast, deterministic, agent-runnable pass/fail signal for the bug, you will find the cause — bisection, hypothesis-testing, and instrumentation all just consume that signal. If you don't have one, no amount of staring at code will save you.

Spend disproportionate effort here. **Be aggressive. Be creative. Refuse to give up.**

### Ways to construct one — try them in roughly this order

1. **Failing test** at whatever seam reaches the bug — unit, integration, e2e.
2. **Curl / HTTP script** against a running dev server.
3. **CLI invocation** with a fixture input, diffing stdout against a known-good snapshot.
4. **Headless browser script** (Playwright / Puppeteer) — drives the UI, asserts on DOM/console/network.
5. **Replay a captured trace.** Save a real network request / payload / event log to disk; replay it through the code path in isolation.
6. **Throwaway harness.** Spin up a minimal subset of the system (one service, mocked deps) that exercises the bug code path with a single function call.
7. **Property / fuzz loop.** If the bug is "sometimes wrong output", run 1000 random inputs and look for the failure mode.
8. **Bisection harness.** If the bug appeared between two known states (commit, dataset, version), automate "boot at state X, check, repeat" so you can `git bisect run` it.
9. **Differential loop.** Run the same input through old-version vs new-version (or two configs) and diff outputs.
10. **HITL bash script.** Last resort. If a human must click, drive _them_ with `scripts/hitl-loop.template.sh` so the loop is still structured. Captured output feeds back to you.

Build the right feedback loop, and the bug is 90% fixed.

### Iterate on the loop itself

Treat the loop as a product. Once you have _a_ loop, ask:

- Can I make it faster? (Cache setup, skip unrelated init, narrow the test scope.)
- Can I make the signal sharper? (Assert on the specific symptom, not "didn't crash".)
- Can I make it more deterministic? (Pin time, seed RNG, isolate filesystem, freeze network.)

A 30-second flaky loop is barely better than no loop. A 2-second deterministic loop is a debugging superpower.

### Non-deterministic bugs

The goal is not a clean repro but a **higher reproduction rate**. Loop the trigger 100×, parallelise, add stress, narrow timing windows, inject sleeps. A 50%-flake bug is debuggable; 1% is not — keep raising the rate until it's debuggable.

### When you genuinely cannot build a loop

Stop and say so explicitly. List what you tried. Ask the user for: (a) access to whatever environment reproduces it, (b) a captured artifact (HAR file, log dump, core dump, screen recording with timestamps), or (c) permission to add temporary production instrumentation. Do **not** proceed to hypothesise without a loop.

Do not proceed to Phase 2 until you have a loop you believe in.

## Phase 2 — Reproduce

Run the loop. Watch the bug appear.

Confirm:

- [ ] The loop produces the failure mode the **user** described — not a different failure that happens to be nearby. Wrong bug = wrong fix.
- [ ] The failure is reproducible across multiple runs (or, for non-deterministic bugs, reproducible at a high enough rate to debug against).
- [ ] You have captured the exact symptom (error message, wrong output, slow timing) so later phases can verify the fix actually addresses it.

Do not proceed until you reproduce the bug.

## Phase 3 — Hypothesise

Generate **3–5 ranked hypotheses** before testing any of them. Single-hypothesis generation anchors on the first plausible idea.

Each hypothesis must be **falsifiable**: state the prediction it makes.

> Format: "If <X> is the cause, then <changing Y> will make the bug disappear / <changing Z> will make it worse."

If you cannot state the prediction, the hypothesis is a vibe — discard or sharpen it.

**Show the ranked list to the user before testing.** They often have domain knowledge that re-ranks instantly ("we just deployed a change to #3"), or know hypotheses they've already ruled out. Cheap checkpoint, big time saver. Don't block on it — proceed with your ranking if the user is AFK.

## Phase 4 — Instrument

Each probe must map to a specific prediction from Phase 3. **Change one variable at a time.**

Tool preference:

1. **Debugger / REPL inspection** if the env supports it. One breakpoint beats ten logs.
2. **Targeted logs** at the boundaries that distinguish hypotheses.
3. Never "log everything and grep".

**Tag every debug log** with a unique prefix, e.g. `[DEBUG-a4f2]`. Cleanup at the end becomes a single grep. Untagged logs survive; tagged logs die.

**Perf branch.** For performance regressions, logs are usually wrong. Instead: establish a baseline measurement (timing harness, `performance.now()`, profiler, query plan), then bisect. Measure first, fix second.

## Phase 5 — Fix + regression test

Write the regression test **before the fix** — but only if there is a **correct seam** for it.

A correct seam is one where the test exercises the **real bug pattern** as it occurs at the call site. If the only available seam is too shallow (single-caller test when the bug needs multiple callers, unit test that can't replicate the chain that triggered the bug), a regression test there gives false confidence.

**If no correct seam exists, that itself is the finding.** Note it. The codebase architecture is preventing the bug from being locked down. Flag this for the next phase.

If a correct seam exists:

1. Turn the minimised repro into a failing test at that seam.
2. Watch it fail.
3. Apply the fix.
4. Watch it pass.
5. Re-run the Phase 1 feedback loop against the original (un-minimised) scenario.

## Phase 6 — Cleanup + post-mortem

Required before declaring done:

- [ ] Original repro no longer reproduces (re-run the Phase 1 loop)
- [ ] Regression test passes (or absence of seam is documented)
- [ ] All `[DEBUG-...]` instrumentation removed (`grep` the prefix)
- [ ] Throwaway prototypes deleted (or moved to a clearly-marked debug location)
- [ ] The hypothesis that turned out correct is stated in the commit / PR message — so the next debugger learns

**Then ask: what would have prevented this bug?** If the answer involves architectural change (no good test seam, tangled callers, hidden coupling) hand off to the `/improve-codebase-architecture` skill with the specifics. Make the recommendation **after** the fix is in, not before — you have more information now than when you started.
41 changes: 41 additions & 0 deletions .agents/skills/diagnose/scripts/hitl-loop.template.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/usr/bin/env bash
# Human-in-the-loop reproduction loop.
# Copy this file, edit the steps below, and run it.
# The agent runs the script; the user follows prompts in their terminal.
#
# Usage:
# bash hitl-loop.template.sh
#
# Two helpers:
# step "<instruction>" → show instruction, wait for Enter
# capture VAR "<question>" → show question, read response into VAR
#
# At the end, captured values are printed as KEY=VALUE for the agent to parse.

set -euo pipefail

step() {
printf '\n>>> %s\n' "$1"
read -r -p " [Enter when done] " _
}

capture() {
local var="$1" question="$2" answer
printf '\n>>> %s\n' "$question"
read -r -p " > " answer
printf -v "$var" '%s' "$answer"
}

# --- edit below ---------------------------------------------------------

step "Open the app at http://localhost:3000 and sign in."

capture ERRORED "Click the 'Export' button. Did it throw an error? (y/n)"

capture ERROR_MSG "Paste the error message (or 'none'):"

# --- edit above ---------------------------------------------------------

printf '\n--- Captured ---\n'
printf 'ERRORED=%s\n' "$ERRORED"
printf 'ERROR_MSG=%s\n' "$ERROR_MSG"
10 changes: 10 additions & 0 deletions .agents/skills/grill-me/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
name: grill-me
description: Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions "grill me".
---

Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.

Ask the questions one at a time.

If a question can be answered by exploring the codebase, explore the codebase instead.
47 changes: 47 additions & 0 deletions .agents/skills/grill-with-docs/ADR-FORMAT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# ADR Format

ADRs live in `docs/adr/` and use sequential numbering: `0001-slug.md`, `0002-slug.md`, etc.

Create the `docs/adr/` directory lazily — only when the first ADR is needed.

## Template

```md
# {Short title of the decision}

{1-3 sentences: what's the context, what did we decide, and why.}
```

That's it. An ADR can be a single paragraph. The value is in recording *that* a decision was made and *why* — not in filling out sections.

## Optional sections

Only include these when they add genuine value. Most ADRs won't need them.

- **Status** frontmatter (`proposed | accepted | deprecated | superseded by ADR-NNNN`) — useful when decisions are revisited
- **Considered Options** — only when the rejected alternatives are worth remembering
- **Consequences** — only when non-obvious downstream effects need to be called out

## Numbering

Scan `docs/adr/` for the highest existing number and increment by one.

## When to offer an ADR

All three of these must be true:

1. **Hard to reverse** — the cost of changing your mind later is meaningful
2. **Surprising without context** — a future reader will look at the code and wonder "why on earth did they do it this way?"
3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons

If a decision is easy to reverse, skip it — you'll just reverse it. If it's not surprising, nobody will wonder why. If there was no real alternative, there's nothing to record beyond "we did the obvious thing."

### What qualifies

- **Architectural shape.** "We're using a monorepo." "The write model is event-sourced, the read model is projected into Postgres."
- **Integration patterns between contexts.** "Ordering and Billing communicate via domain events, not synchronous HTTP."
- **Technology choices that carry lock-in.** Database, message bus, auth provider, deployment target. Not every library — just the ones that would take a quarter to swap out.
- **Boundary and scope decisions.** "Customer data is owned by the Customer context; other contexts reference it by ID only." The explicit no-s are as valuable as the yes-s.
- **Deliberate deviations from the obvious path.** "We're using manual SQL instead of an ORM because X." Anything where a reasonable reader would assume the opposite. These stop the next engineer from "fixing" something that was deliberate.
- **Constraints not visible in the code.** "We can't use AWS because of compliance requirements." "Response times must be under 200ms because of the partner API contract."
- **Rejected alternatives when the rejection is non-obvious.** If you considered GraphQL and picked REST for subtle reasons, record it — otherwise someone will suggest GraphQL again in six months.
77 changes: 77 additions & 0 deletions .agents/skills/grill-with-docs/CONTEXT-FORMAT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# CONTEXT.md Format

## Structure

```md
# {Context Name}

{One or two sentence description of what this context is and why it exists.}

## Language

**Order**:
{A concise description of the term}
_Avoid_: Purchase, transaction

**Invoice**:
A request for payment sent to a customer after delivery.
_Avoid_: Bill, payment request

**Customer**:
A person or organization that places orders.
_Avoid_: Client, buyer, account

## Relationships

- An **Order** produces one or more **Invoices**
- An **Invoice** belongs to exactly one **Customer**

## Example dialogue

> **Dev:** "When a **Customer** places an **Order**, do we create the **Invoice** immediately?"
> **Domain expert:** "No — an **Invoice** is only generated once a **Fulfillment** is confirmed."

## Flagged ambiguities

- "account" was used to mean both **Customer** and **User** — resolved: these are distinct concepts.
```

## Rules

- **Be opinionated.** When multiple words exist for the same concept, pick the best one and list the others as aliases to avoid.
- **Flag conflicts explicitly.** If a term is used ambiguously, call it out in "Flagged ambiguities" with a clear resolution.
- **Keep definitions tight.** One sentence max. Define what it IS, not what it does.
- **Show relationships.** Use bold term names and express cardinality where obvious.
- **Only include terms specific to this project's context.** General programming concepts (timeouts, error types, utility patterns) don't belong even if the project uses them extensively. Before adding a term, ask: is this a concept unique to this context, or a general programming concept? Only the former belongs.
- **Group terms under subheadings** when natural clusters emerge. If all terms belong to a single cohesive area, a flat list is fine.
- **Write an example dialogue.** A conversation between a dev and a domain expert that demonstrates how the terms interact naturally and clarifies boundaries between related concepts.

## Single vs multi-context repos

**Single context (most repos):** One `CONTEXT.md` at the repo root.

**Multiple contexts:** A `CONTEXT-MAP.md` at the repo root lists the contexts, where they live, and how they relate to each other:

```md
# Context Map

## Contexts

- [Ordering](./src/ordering/CONTEXT.md) — receives and tracks customer orders
- [Billing](./src/billing/CONTEXT.md) — generates invoices and processes payments
- [Fulfillment](./src/fulfillment/CONTEXT.md) — manages warehouse picking and shipping

## Relationships

- **Ordering → Fulfillment**: Ordering emits `OrderPlaced` events; Fulfillment consumes them to start picking
- **Fulfillment → Billing**: Fulfillment emits `ShipmentDispatched` events; Billing consumes them to generate invoices
- **Ordering ↔ Billing**: Shared types for `CustomerId` and `Money`
```

The skill infers which structure applies:

- If `CONTEXT-MAP.md` exists, read it to find contexts
- If only a root `CONTEXT.md` exists, single context
- If neither exists, create a root `CONTEXT.md` lazily when the first term is resolved

When multiple contexts exist, infer which one the current topic relates to. If unclear, ask.
Loading
Loading