Repository navigation
Expand file tree
/
Copy pathissues_data.json
More file actions
1707 lines (1707 loc) · 158 KB
/
Copy pathissues_data.json
File metadata and controls
1707 lines (1707 loc) · 158 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
[
{
"id": 1,
"title": "feat(contracts): implement milestone-based progressive escrow releases in agentic-commerce",
"category": "Smart Contracts",
"labels": "contracts,enhancement,Stellar Wave",
"difficulty": "Hard",
"skills": "Rust, Soroban, TypeScript",
"summary": "Extend the agentic-commerce contract (contracts/agentic-commerce/src/lib.rs) to support multi-stage milestone releases for high-value agent jobs, allowing clients to fund a total budget split across sequential deliverables with independent verification.",
"motivation": "In contracts/agentic-commerce/src/lib.rs:L70-L90, the Job struct currently only tracks a monolithic budget, released, and a single deliverable. For long-running autonomous workflows, locking large budgets with all-or-nothing payout presents significant counterparty risk for both clients and provider agents.",
"implementation": "1. Define Milestone struct with index, amount, description, deliverable, and approved status.\n2. Store milestones in persistent storage under DataKey::Milestones(job_id).\n3. Implement create_milestone_job, submit_milestone, approve_milestone, and cancel_uncompleted_milestones entry points.\n4. Update CommerceClient in sdk/src/commerce.ts.",
"criteria": [
"Milestone struct and storage schema implemented in agentic-commerce.",
"Invariant check: sum of milestone amounts must exactly equal total job budget.",
"Evaluator approval transfers proportional funds and fee per milestone.",
"Comprehensive unit tests in test.rs covering 3-milestone happy path and premature cancellation.",
"TypeScript SDK typings and method signatures exported in sdk/src/types.ts."
]
},
{
"id": 2,
"title": "feat(contracts): add multi-token whitelist and decimal normalization in agentic-commerce",
"category": "Smart Contracts",
"labels": "contracts,enhancement,Stellar Wave",
"difficulty": "Medium",
"skills": "Rust, Soroban, Stellar Asset Contract",
"summary": "Implement an approved asset whitelist and decimal normalization mechanism in contracts/agentic-commerce/src/lib.rs to safely support multiple Stellar Asset Contracts (USDC, EURC, XLM) beyond a single hardcoded token address.",
"motivation": "In contracts/agentic-commerce/src/lib.rs:L75, any token Address can currently be passed to create_job(). Without a whitelist or asset validation, malicious callers can pass fake token contracts that mimic SAC interfaces to forge escrow balances, or use tokens with non-standard decimal precision causing calculation errors in fee_bps.",
"implementation": "1. Introduce DataKey::AllowedTokens mapping and Admin entry points add_token(env, token: Address) and remove_token(env, token: Address).\n2. In create_job(), verify that env.storage().instance().has(\u0026DataKey::AllowedToken(token.clone())), reverting with Error::UnsupportedToken if not whitelisted.\n3. Query token decimal precision via Soroban token client during registration and store normalization factor.\n4. Emit TokenWhitelisted and TokenRemoved contract events.",
"criteria": [
"AllowedTokens storage mapping and admin management entry points implemented.",
"create_job() panics with Error::UnsupportedToken when non-whitelisted token address is used.",
"Decimal normalization handles 7-decimal Stellar assets and custom precision assets.",
"Unit tests verify non-admin cannot modify token whitelist.",
"SDK updated to export whitelisted token addresses."
]
},
{
"id": 3,
"title": "feat(contracts): implement decentralized dispute arbitration with staking and slashing",
"category": "Smart Contracts",
"labels": "contracts,security,enhancement",
"difficulty": "Hard",
"skills": "Rust, Soroban, Cryptoeconomics",
"summary": "Create a decentralized arbitration mechanism in contracts/agentic-commerce/src/lib.rs where disputed jobs can be escalated to an elected arbitrator pool with economic stake at risk.",
"motivation": "Currently in contracts/agentic-commerce/src/lib.rs:L62-L65, the Disputed status can only be resolved by the existing evaluator calling complete() or client calling cancel(). If the evaluator becomes unresponsive or compromised, disputed escrow funds remain locked indefinitely.",
"implementation": "1. Define ArbitratorPool struct with required stake_amount and response_timeout.\n2. Add dispute_with_arbitration(env, caller, job_id, dispute_fee) entry point that locks dispute fee and assigns arbitrator.\n3. Implement resolve_dispute(env, arbitrator, job_id, client_pct, provider_pct) distributing escrowed funds according to arbitration ruling.\n4. Implement slash_arbitrator(env, admin, arbitrator) for proven malicious verdicts.",
"criteria": [
"Arbitration entry points implemented with role-based auth checks.",
"Escrow funds distributed according to arbitrator split percentage.",
"Dispute timeout fallback allows mutual refund if arbitrator fails to rule within 7 days.",
"Unit tests verify correct balance transfers to client, provider, and arbitrator fee.",
"SDK CommerceClient updated with disputeWithArbitration() and resolveDispute()."
]
},
{
"id": 4,
"title": "feat(contracts): add WebAuthn passkey and delegate key authorization in agent-identity",
"category": "Smart Contracts",
"labels": "contracts,security,Stellar Wave",
"difficulty": "Hard",
"skills": "Rust, Soroban, WebAuthn, Cryptography",
"summary": "Support Secp256r1 WebAuthn passkeys and ephemeral session delegates in contracts/agent-identity/src/lib.rs, enabling hardware-bound agent keys and time-limited signing delegates.",
"motivation": "Currently in contracts/agent-identity/src/lib.rs:L128, owner.require_auth() strictly requires native Ed25519 wallet signatures. Autonomous AI agents running on cloud workers cannot safely store master private keys, requiring scoped session keys that can execute tasks without risking master wallet drain.",
"implementation": "1. Implement Delegate struct with delegate_address, valid_until, and permissions bitmask.\n2. Add add_delegate(env, owner, delegate: Address, ttl: u64, permissions: u32) and revoke_delegate(env, owner, delegate: Address).\n3. Implement __check_auth hook verifying both native Ed25519 and Secp256r1 passkey signatures via env.crypto().secp256r1_verify.\n4. Emit DelegateGranted and DelegateRevoked contract events.",
"criteria": [
"Delegates stored under DataKey::Delegates(agent_id, delegate_address).",
"Time-bounded expiration enforced using env.ledger().timestamp().",
"Secp256r1 passkey signature verification unit tests pass in Soroban test environment.",
"Expired delegates fail authorization with Error::DelegateExpired.",
"SDK IdentityClient updated to support session delegate signing."
]
},
{
"id": 5,
"title": "perf(contracts): implement automated storage rent TTL extension and archive restoration policies",
"category": "Smart Contracts",
"labels": "contracts,performance,infrastructure",
"difficulty": "Medium",
"skills": "Rust, Soroban, Storage Rent",
"summary": "Establish proactive storage rent TTL management across contracts/agent-identity and contracts/agentic-commerce to prevent state eviction on high-volume Soroban ledgers.",
"motivation": "In contracts/agent-identity/src/lib.rs:L9-L14, constant LEDGER_BUMP is set to 518,400 ledgers (~30 days). However, in agentic-commerce, several persistent storage keys (Job, Evaluators, Channels) do not consistently invoke env.storage().persistent().extend_ttl() upon read operations, creating risk of state archiving during inactive periods.",
"implementation": "1. Create a shared helper extend_key_ttl(env: \u0026Env, key: \u0026DataKey, threshold: u32, bump: u32) across both crates.\n2. Apply proactive TTL extensions in get_job(), get_agent(), and voucher verification paths.\n3. Add restore_job_state(env, job_id) entry point permitting callers to bump archived jobs back into active storage.\n4. Add benchmarks measuring gas cost with and without TTL extensions.",
"criteria": [
"All persistent storage keys extended upon state-changing and read operations.",
"No storage eviction occurs during simulated 60-day test environment ledger advancement.",
"Unit tests verify restore_job_state() successfully unarchives expired keys.",
"Gas consumption benchmarks documented in contracts/README.md."
]
},
{
"id": 6,
"title": "feat(contracts): implement atomic batch job creation and parallel escrow funding",
"category": "Smart Contracts",
"labels": "contracts,enhancement,Stellar Wave",
"difficulty": "Medium",
"skills": "Rust, Soroban, Optimization",
"summary": "Add batch_create_jobs entry point to contracts/agentic-commerce/src/lib.rs allowing agent orchestrators to escrow funds for multiple specialized worker agents in a single atomic transaction.",
"motivation": "Autonomous agent workflows frequently dispatch tasks to a swarm of sub-agents (e.g. namer, researcher, copywriter). Currently, the client must submit N distinct create_job transactions, incurring N base fees, sequential ledger waits, and partial failure states where some jobs are funded while others fail.",
"implementation": "1. Define JobRequest struct containing provider, evaluator, token, budget, and description.\n2. Add batch_create_jobs(env, client, requests: Vec\u003cJobRequest\u003e) -\u003e Vec\u003cu64\u003e.\n3. Consolidate token transfers into a single bulk transfer per token contract where possible, or sequential atomic transfers that revert entirely on failure.\n4. Emit BatchJobsCreated event containing array of assigned job IDs.",
"criteria": [
"batch_create_jobs accepts up to 10 jobs per invocation without exceeding CPU budget.",
"Atomic rollback: if any single job creation fails (e.g. insufficient token allowance), the entire batch reverts.",
"Single token transfer from client to escrow contract for the total aggregated budget.",
"Unit tests in test.rs verify batch creation with 5 concurrent worker agents.",
"CommerceClient.batchCreateJobs() implemented in SDK."
]
},
{
"id": 7,
"title": "feat(contracts): add cooperative mutual closure for payment channels without dispute delay",
"category": "Smart Contracts",
"labels": "contracts,enhancement,sdk",
"difficulty": "Medium",
"skills": "Rust, Soroban, Payment Channels",
"summary": "Implement cooperative mutual closure in contracts/agentic-commerce/src/lib.rs for payment channels, allowing payer and provider to instantly settle and release funds when both signatures agree.",
"motivation": "Currently in contracts/agentic-commerce/src/lib.rs:L113-L125 and L1040-L1090, closing a payment channel requires initiating close_channel followed by an on-chain dispute waiting window (closing_at) before funds can be withdrawn. In friendly API interactions where client and provider agree on final balances, waiting 24 hours creates unnecessary capital lockup.",
"implementation": "1. Add mutual_close_channel(env, channel_id: u64, final_amount: i128, provider_sig: soroban_sdk::BytesN\u003c64\u003e) entry point.\n2. Verify payer authorization via payer.require_auth().\n3. Verify provider cryptographic signature over the tuple (channel_id, final_amount, \u0027MUTUAL_CLOSE\u0027).\n4. Immediately transfer final_amount to provider and (deposit - final_amount) back to payer, deleting the channel state.\n5. Emit ChannelMutuallyClosed event.",
"criteria": [
"Channel settles instantly in the same ledger when both parties agree.",
"Remaining deposit balance immediately refunded to payer wallet.",
"Forged or invalid provider signatures are rejected with Error::InvalidSignature.",
"Unit tests verify zero dispute period when mutual_close_channel is invoked.",
"SDK paymentChannels.ts updated with mutualCloseChannel() method."
]
},
{
"id": 8,
"title": "feat(contracts): implement dynamic tiered fee discounts based on historical agent volume",
"category": "Smart Contracts",
"labels": "contracts,enhancement",
"difficulty": "Medium",
"skills": "Rust, Soroban, Tokenomics",
"summary": "Introduce automated protocol fee discounts in contracts/agentic-commerce/src/lib.rs based on cumulative settled volume, incentivizing high-frequency agent commerce.",
"motivation": "Currently, contracts/agentic-commerce/src/lib.rs:L142 uses a fixed DEFAULT_FEE_BPS = 100 (1%). High-volume institutional agents and liquidity routers are disincentivized from processing micropayments through the protocol due to flat fee structures that do not reward ecosystem loyalty.",
"implementation": "1. Maintain DataKey::AgentVolume(Address) tracking total settled volume in USDC equivalent.\n2. Define fee tier thresholds: Base (100 bps), Silver (75 bps for \u003e10,000 USDC), Gold (50 bps for \u003e100,000 USDC), VIP (25 bps for \u003e500,000 USDC).\n3. Calculate effective fee in complete() dynamically based on provider\u0027s cumulative volume tier.\n4. Update agent cumulative volume upon every successful complete().",
"criteria": [
"Volume tracker accurately accumulates settled job budgets per agent address.",
"Dynamic fee calculation reduces treasury fee down to minimum 25 bps for top tier.",
"Overflow-safe arithmetic using checked_add and checked_mul.",
"Unit tests verify fee tier promotions and correct fee deductions across multiple jobs.",
"SDK exports getAgentFeeTier(address) helper."
]
},
{
"id": 9,
"title": "feat(contracts): add agent capability attestations and verifiable soulbound credentials",
"category": "Smart Contracts",
"labels": "contracts,compliance,Stellar Wave",
"difficulty": "Medium",
"skills": "Rust, Soroban, ERC-8004",
"summary": "Add on-chain capability badges and verifiable credentials in contracts/agent-identity/src/lib.rs to certify agent specializations (e.g., Code Auditing, Translation, Market Making).",
"motivation": "In contracts/agent-identity/src/lib.rs:L23-L30, Agent only contains id, owner, and uri. Clients have no cryptographic assurance regarding an agent\u0027s verified capabilities, security clearance, or benchmark scores without crawling third-party IPFS links that can change at any time.",
"implementation": "1. Introduce Badge struct with issuer: Address, tag: Symbol, score: u32, issued_at: u64, expires_at: u64.\n2. Store badges under DataKey::Badges(agent_id, tag).\n3. Add issue_badge(env, issuer, agent_id: u64, tag: Symbol, score: u32, ttl: u64) requiring issuer.require_auth().\n4. Add revoke_badge(env, issuer, agent_id: u64, tag: Symbol) allowing issuers to revoke expired or invalid badges.",
"criteria": [
"Badges can only be minted by authorized issuer addresses.",
"get_badges(agent_id) returns active, non-expired credentials.",
"Deregistering an agent properly handles or archives associated badges.",
"Unit tests in agent-identity test.rs cover badge issuance, verification, and expiration.",
"Dashboard displays verified capability badges on agent profile cards."
]
},
{
"id": 10,
"title": "sec(contracts): implement reentrancy and cross-contract re-call protection hooks",
"category": "Smart Contracts",
"labels": "contracts,security",
"difficulty": "Hard",
"skills": "Rust, Soroban, Security",
"summary": "Incorporate formal reentrancy guards and state check-effects-interactions patterns across all escrow release and refund paths in contracts/agentic-commerce/src/lib.rs.",
"motivation": "While Soroban prevents classical EVM reentrancy in some contexts, cross-contract token callbacks and custom token contracts can trigger unexpected re-invocations during TokenClient::transfer calls in complete() and cancel(), potentially altering job states before completion finishes.",
"implementation": "1. Implement a ReentrancyGuard utility using temporary storage (DataKey::ReentrancyLock).\n2. Enforce strict Checks-Effects-Interactions pattern: update job.status = JobStatus::Completed and persist state BEFORE initiating token transfers to provider and treasury.\n3. Revert with Error::ReentrancyDetected if lock is active.\n4. Add fuzzing tests attempting recursive entry point invocations.",
"criteria": [
"Job state transitions committed before any cross-contract token invocation.",
"Reentrancy lock properly set and cleaned up in complete(), cancel(), and mutual_close().",
"Simulated malicious token contract attempting reentrant call is rejected.",
"Unit tests verify zero gas leaks or state corruption under reentrant simulation."
]
},
{
"id": 11,
"title": "feat(contracts): add rate-limiting job creation guard to prevent state storage griefing",
"category": "Smart Contracts",
"labels": "contracts,security,infrastructure",
"difficulty": "Medium",
"skills": "Rust, Soroban, Gas Optimization",
"summary": "Implement an on-chain sliding window rate limiter in contracts/agentic-commerce/src/lib.rs to limit maximum job creation frequency per client account.",
"motivation": "Currently in contracts/agentic-commerce/src/lib.rs:L147, MIN_BUDGET is set to 1. A malicious account can flood the contract with thousands of dust jobs (1 stroop each), polluting contract instance storage, degrading indexer throughput, and exhausting node cache memory.",
"implementation": "1. Store DataKey::ClientRate(Address) containing last_ledger: u32 and count: u32 in temporary storage.\n2. In create_job(), verify that the client has not exceeded MAX_JOBS_PER_WINDOW (e.g., 20 jobs per 100 ledgers).\n3. Revert with Error::RateLimitExceeded if threshold is violated.\n4. Provide admin entry point set_rate_limit(window: u32, max_calls: u32).",
"criteria": [
"Temporary storage rate limit counters expire automatically without state bloat.",
"Legitimate users under the threshold experience negligible gas overhead (\u003c2,000 instructions).",
"Spam script attempting 50 rapid job creations is throttled after 20.",
"Unit tests verify rate window reset after ledger advancement."
]
},
{
"id": 12,
"title": "feat(contracts): implement weighted voting threshold for multi-evaluator quorums",
"category": "Smart Contracts",
"labels": "contracts,enhancement,Stellar Wave",
"difficulty": "Hard",
"skills": "Rust, Soroban, Governance",
"summary": "Enhance JobEvaluators in contracts/agentic-commerce/src/lib.rs:L95 to support distinct evaluator weights rather than a simple 1-evaluator-1-vote quorum.",
"motivation": "In enterprise and DAO workflows, evaluators have differing seniority (e.g. Lead Auditor weight 3, QA Engineer weight 1). The current JobEvaluators implementation treats all evaluators equally with a raw count threshold, precluding weighted consensus models.",
"implementation": "1. Update JobEvaluators struct to include soroban_sdk::Map\u003cAddress, u32\u003e evaluator_weights and total_weight: u32.\n2. In approve_job(), sum the weights of approving evaluators and compare against required weight_threshold.\n3. Ensure duplicate approvals from the same evaluator cannot double-count weight.\n4. Update complete() trigger condition to require accumulated weight \u003e= threshold.",
"criteria": [
"Weights validated at job creation: sum of weights \u003e= weight_threshold.",
"Approval tracking prevents double voting by recording Address in approvals map.",
"Job automatically executes completion and payout when weighted threshold is reached.",
"Comprehensive test coverage for 3-party weighted voting scenarios in test.rs."
]
},
{
"id": 13,
"title": "feat(contracts): introduce agent lifecycle state machine with suspended and slashed flags",
"category": "Smart Contracts",
"labels": "contracts,compliance,enhancement",
"difficulty": "Medium",
"skills": "Rust, Soroban, State Machines",
"summary": "Expand Agent struct in contracts/agent-identity/src/lib.rs with an explicit AgentStatus enum (Active, Paused, Suspended, Slashed) and administrative governance controls.",
"motivation": "Currently in contracts/agent-identity/src/lib.rs:L25-L30, an agent is either registered or completely deleted (deregistered). There is no mechanism for an agent owner to temporarily pause intake during maintenance, or for governance to suspend a compromised agent without erasing its audit history.",
"implementation": "1. Define AgentStatus enum: Active = 0, Paused = 1, Suspended = 2, Slashed = 3.\n2. Add status: AgentStatus field to Agent struct (preserving backward compatible XDR serialization).\n3. Add pause_agent(env, owner, agent_id) and unpause_agent(env, owner, agent_id).\n4. Add admin entry point suspend_agent(env, admin, agent_id, reason).\n5. Check status in agentic-commerce before allowing job creation assigned to provider.",
"criteria": [
"Agent status correctly initialized to Active on registration.",
"Paused agents cannot be selected as providers in create_job().",
"Only contract admin can suspend or slash an agent.",
"Unit tests verify state transitions and unauthorized call rejections."
]
},
{
"id": 14,
"title": "feat(contracts): add SHA-256 deliverable payload content hash verification",
"category": "Smart Contracts",
"labels": "contracts,security,Stellar Wave",
"difficulty": "Medium",
"skills": "Rust, Soroban, Cryptography",
"summary": "Add cryptographic content hash commitments to submit() and complete() in contracts/agentic-commerce/src/lib.rs, guaranteeing that submitted deliverables cannot be mutated off-chain after approval.",
"motivation": "In contracts/agentic-commerce/src/lib.rs:L83, deliverable is merely an arbitrary URI String (e.g. https://... or ipfs://...). If an agent points to a dynamic HTTP URL or mutable IPFS folder, the provider can swap the deliverable content after receiving client payment.",
"implementation": "1. Add deliverable_hash: BytesN\u003c32\u003e parameter to submit().\n2. Store deliverable_hash in Job struct or dedicated storage key.\n3. In complete(), allow evaluator to optionally verify and attest that the evaluated content matches deliverable_hash.\n4. Emit JobSubmitted event with deliverable_hash topic for indexer integrity verification.",
"criteria": [
"submit() requires a valid 32-byte SHA-256 content hash.",
"Stored content hash is immutable once submitted.",
"Evaluator complete() rejects mismatched content hash assertions.",
"SDK updated to compute SHA-256 hash of deliverable buffer automatically before submitting."
]
},
{
"id": 15,
"title": "sec(contracts): implement timelock controller for contract fee changes and WASM upgrades",
"category": "Smart Contracts",
"labels": "contracts,security,governance",
"difficulty": "Hard",
"skills": "Rust, Soroban, Governance",
"summary": "Implement a minimum 48-hour timelock queue for critical admin actions (set_fee_bps, set_treasury, upgrade) in contracts/agentic-commerce and contracts/agent-identity.",
"motivation": "Currently in contracts/agentic-commerce/src/lib.rs:L870-L910, admin can instantly change fees (set_fee_bps) or redirect all treasury revenue (set_treasury) in a single transaction. In agent-identity (L105), admin can instantly upgrade the WASM hash. If admin keys are compromised, the entire protocol can be rug-pulled without warning.",
"implementation": "1. Create TimelockAction struct with action_type, payload_hash, scheduled_at, and execution_deadline.\n2. Add schedule_action(env, admin, action_type, payload_hash, delay) requiring delay \u003e= 172,800 seconds (48h).\n3. Add execute_action(env, admin, action_id) that validates elapsed ledger timestamp before applying upgrade or fee modification.\n4. Add cancel_scheduled_action(env, admin, action_id) to abort malicious proposals.",
"criteria": [
"Instant admin fee updates or WASM upgrades are strictly prevented.",
"Execution fails if attempted prior to timelock expiration.",
"Proposal queue visible on-chain for ecosystem monitoring and alerting.",
"Comprehensive unit tests verify scheduling, time verification, and cancellation."
]
},
{
"id": 16,
"title": "perf(contracts): optimize contract storage layout using compact enum representations",
"category": "Smart Contracts",
"labels": "contracts,performance,refactor",
"difficulty": "Medium",
"skills": "Rust, Soroban, XDR Optimization",
"summary": "Refactor storage keys and struct field representations across both Soroban contracts to minimize XDR byte size, reducing ledger rent and transaction fee costs.",
"motivation": "Soroban charges transaction fees and storage rent proportional to serialized XDR byte length. Currently, several DataKey variants use verbose wrappers and full 32-byte strings where compact u32 or single-byte discriminants would save ~35% on read/write ledger costs.",
"implementation": "1. Audit DataKey in agent-identity and agentic-commerce for padding and redundant fields.\n2. Pack Boolean flags and small integers into bitflags where appropriate.\n3. Measure and document XDR byte reductions across all key types.\n4. Verify zero breakage to existing deployed contract state using migration deserializers.",
"criteria": [
"Serialized XDR size reduced by at least 20% on hot storage keys.",
"All unit tests pass without breaking changes to public ABI.",
"Gas benchmarking script confirms reduction in CPU/memory resource consumption."
]
},
{
"id": 17,
"title": "test(contracts): add property-based invariant testing suite using proptest",
"category": "Smart Contracts",
"labels": "contracts,testing,security",
"difficulty": "Medium",
"skills": "Rust, Soroban, Property Testing",
"summary": "Introduce proptest property-based fuzz testing in contracts/agentic-commerce/src/test.rs to formally prove economic invariants across arbitrary sequences of job operations.",
"motivation": "Unit tests currently test discrete happy and sad paths. However, complex multi-step sequences (e.g. create -\u003e fund -\u003e submit -\u003e dispute -\u003e partial refund -\u003e expire) with extreme budget values or odd fee configurations could violate core conservation-of-value invariants.",
"implementation": "1. Add proptest dev-dependency to contracts/agentic-commerce/Cargo.toml.\n2. Define system invariants: `sum(payouts) + sum(fees) + contract_balance == total_deposited_budgets`.\n3. Generate arbitrary sequences of create_job, submit, complete, cancel, and dispute operations.\n4. Assert invariant holds after every generated transaction sequence.",
"criteria": [
"proptest runs at least 1,000 randomized state-machine iterations in CI.",
"Zero token leaks: contract balance never diverges from expected escrowed funds.",
"No arithmetic underflows or overflows possible with valid i128 inputs.",
"Property tests integrated into `cargo test` command."
]
},
{
"id": 18,
"title": "perf(contracts): optimize WASM binary footprint with dead code elimination and LTO",
"category": "Smart Contracts",
"labels": "contracts,performance,devops",
"difficulty": "Medium",
"skills": "Rust, WASM, Cargo, Optimization",
"summary": "Tune Cargo compiler flags and strip unused formatting dependencies to reduce compiled WASM binary sizes below 8 KB for agentic-commerce and 3.5 KB for agent-identity.",
"motivation": "Deploying WASM to Soroban charges network fees proportional to binary size, and larger binaries take longer to load and verify during VM invocation. agentic_commerce.wasm is currently ~9.4 KB.",
"implementation": "1. Enable Link-Time Optimization (lto = \u0027fat\u0027), codegen-units = 1, and opt-level = \u0027z\u0027 in root Cargo.toml [profile.release].\n2. Replace any remaining panic string allocations with contracterror enum codes.\n3. Run wasm-opt -Oz and measure binary reduction.\n4. Update scripts/build.sh with automated size regression checks.",
"criteria": [
"agentic_commerce.wasm binary size reduced by at least 15%.",
"All contract entry points remain fully functional and ABI export verified.",
"CI pipeline fails if compiled WASM exceeds 12 KB limit."
]
},
{
"id": 19,
"title": "refactor(contracts): standardize contract event schema versioning and backward compatibility",
"category": "Smart Contracts",
"labels": "contracts,refactor,compliance",
"difficulty": "Medium",
"skills": "Rust, Soroban, Architecture",
"summary": "Standardize all contract event definitions using versioned struct tags to ensure indexers can seamlessly handle schema updates without dropping historical events.",
"motivation": "In contracts/agentic-commerce/src/lib.rs, events like JobCreated and JobCompleted are emitted via #[contractevent]. If fields are added or modified in future protocol iterations, indexers parsing historical ledgers will encounter deserialization errors without explicit event versioning.",
"implementation": "1. Add version: u32 field to all #[contractevent] structs.\n2. Define canonical topic hierarchy: [ContractSymbol, EventName, Version, ActorAddress].\n3. Document event schema registry in docs/EVENTS.md.\n4. Update indexer/src/poller.ts to parse versioned event topics.",
"criteria": [
"All contract events emit standardized versioned topic headers.",
"docs/EVENTS.md updated with complete JSON schema specifications.",
"Indexer gracefully parses both v1 legacy events and v2 versioned events."
]
},
{
"id": 20,
"title": "feat(contracts): implement on-chain protocol treasury staking and revenue distribution",
"category": "Smart Contracts",
"labels": "contracts,enhancement,Tokenomics",
"difficulty": "Hard",
"skills": "Rust, Soroban, Tokenomics",
"summary": "Create a treasury revenue-sharing module in contracts/agentic-commerce/src/lib.rs allowing protocol fee dividends to be distributed to active agent stakers.",
"motivation": "Currently in contracts/agentic-commerce/src/lib.rs:L560, the 1% protocol fee is transferred directly to a single static treasury address. To align incentives and build a self-sustaining agent economy, protocol revenue should be programmatically apportioned between development reserve, agent staking yield, and ecosystem grants.",
"implementation": "1. Define TreasurySplit struct: dev_pool_bps, staking_pool_bps, grant_pool_bps (summing to 10,000).\n2. Add stake_tokens(env, staker, amount) and unstake_tokens(env, staker, amount).\n3. In complete(), split the collected fee according to TreasurySplit allocations.\n4. Implement claim_staking_rewards(env, staker) allowing stakers to harvest their share of protocol fees.",
"criteria": [
"Protocol fees automatically divided according to governance allocation percentages.",
"Stakers earn proportional yield based on stake weight and duration.",
"Zero fee leakage or precision loss in integer division.",
"Unit tests verify staking, rewards accumulation, and withdrawal flows."
]
},
{
"id": 21,
"title": "feat(contracts): add cross-currency escrow settlements via Stellar Path Payments",
"category": "Smart Contracts",
"labels": "contracts,enhancement,Stellar Wave",
"difficulty": "Hard",
"skills": "Rust, Soroban, Stellar DEX",
"summary": "Support cross-currency settlement in agentic-commerce allowing clients to fund jobs in XLM/EURC while provider agents receive guaranteed USDC upon completion.",
"motivation": "Agents operate globally and prefer diverse settlement currencies. Requiring all clients to acquire USDC prior to job creation introduces friction. Integrating Stellar DEX path payment routing allows seamless cross-asset conversion at escrow deposit time.",
"implementation": "1. Interface with Stellar DEX or Soroban AMM pool contracts.\n2. Add fund_job_with_swap(env, client, input_token, max_input_amount, job_id) entry point.\n3. Execute atomic swap into target job token and lock exact budget into escrow.\n4. Refund any unspent slippage remainder back to client wallet.",
"criteria": [
"Client can fund a USDC escrow using XLM in a single transaction.",
"Max input amount guard protects client from adverse market slippage.",
"Escrow accurately receives the full required target budget.",
"Unit tests mock AMM swap and verify balance distributions."
]
},
{
"id": 22,
"title": "feat(contracts): support partial mutual refunds on negotiated job cancellations",
"category": "Smart Contracts",
"labels": "contracts,enhancement",
"difficulty": "Medium",
"skills": "Rust, Soroban, Commerce",
"summary": "Enable negotiated mutual cancellation in contracts/agentic-commerce/src/lib.rs where client and provider agree to split escrowed funds (e.g. 50/50) when a job is partially delivered.",
"motivation": "Currently in contracts/agentic-commerce/src/lib.rs:L600-L640, cancel() is strictly all-or-nothing (100% refund to client), and can only be invoked while status is Funded (not Submitted). If work was partially done, there is no on-chain mechanism for client and provider to agree on a partial compensation split.",
"implementation": "1. Add mutual_cancel(env, client_refund: i128, provider_payout: i128, job_id: u64, provider_sig: BytesN\u003c64\u003e).\n2. Require client authorization and verify provider cryptographic signature approving the exact split amounts.\n3. Verify invariant: client_refund + provider_payout == job.budget - job.released.\n4. Transfer funds accordingly and mark job status Cancelled.\n5. Emit JobMutuallyCancelled event.",
"criteria": [
"Both parties must cryptographically sign off on the exact split amounts.",
"Funds instantly disbursed without waiting for evaluator action.",
"State updated to Cancelled to prevent replay or subsequent submission.",
"Unit tests verify correct balance transfers and signature validation."
]
},
{
"id": 23,
"title": "sec(contracts): implement granular emergency pause flags for contract entry points",
"category": "Smart Contracts",
"labels": "contracts,security",
"difficulty": "Medium",
"skills": "Rust, Soroban, Security",
"summary": "Replace binary contract pause flag with granular feature pause bits (PAUSE_CREATE, PAUSE_PAYOUT, PAUSE_CHANNEL) in contracts/agentic-commerce/src/lib.rs.",
"motivation": "In contracts/agentic-commerce/src/lib.rs:L135, DataKey::Paused is a monolithic boolean. If an exploit is identified in payment channels, the admin must pause the entire contract, halting all normal job escrows and hurting unrelated users.",
"implementation": "1. Replace DataKey::Paused with DataKey::PauseFlags(u32).\n2. Define bitmasks: PAUSE_CREATE_JOB = 1 \u003c\u003c 0, PAUSE_SUBMIT = 1 \u003c\u003c 1, PAUSE_COMPLETE = 1 \u003c\u003c 2, PAUSE_CHANNELS = 1 \u003c\u003c 3.\n3. Add set_pause_flags(env, admin, flags: u32).\n4. Apply granular check in each affected entry point.",
"criteria": [
"Admin can pause payment channels while leaving standard escrows fully operational.",
"Error codes specify exactly which subsystem is paused (e.g. Error::ChannelPaused).",
"Emergency unpause restores full operations immediately.",
"Unit tests verify independent toggling of pause bitmasks."
]
},
{
"id": 24,
"title": "feat(contracts): add automated SLA breach penalty deduction on late job submissions",
"category": "Smart Contracts",
"labels": "contracts,enhancement,Stellar Wave",
"difficulty": "Medium",
"skills": "Rust, Soroban, Logic",
"summary": "Add deadline SLA enforcement in contracts/agentic-commerce/src/lib.rs with progressive penalty deductions deducted from provider payout for overdue submissions.",
"motivation": "Clients requiring urgent data analysis or market research often receive submissions well past agreed deadlines without any contractual compensation. Incorporating an SLA penalty schedule automatically penalizes late providers while fairly compensating patient clients.",
"implementation": "1. Add sla_deadline: u64 and penalty_bps_per_hour: u32 fields to Job.\n2. In submit(), record submitted_at timestamp.\n3. In complete(), if submitted_at \u003e sla_deadline, compute overdue duration and deduct accumulated penalty percentage from provider payout, returning the penalty directly to the client.\n4. Cap maximum penalty at 50% of budget.",
"criteria": [
"Submissions before deadline receive full agreed payout.",
"Late submissions incur deterministic hourly penalty returned to client.",
"Penalty calculation capped at configured maximum to prevent underflow.",
"Unit tests verify correct penalty math and multi-party token payouts."
]
},
{
"id": 25,
"title": "feat(contracts): create contract state snapshot export and ledger verification tool",
"category": "Smart Contracts",
"labels": "contracts,tooling,developer-experience",
"difficulty": "Medium",
"skills": "Rust, TypeScript, Soroban CLI",
"summary": "Build a CLI verification utility that dumps on-chain contract instance and persistent storage keys to JSON and cryptographically verifies state tree consistency.",
"motivation": "When preparing for contract upgrades (upgrade() in agent-identity or agentic-commerce), operators must inspect the raw state snapshot to ensure zero storage layout collisions or orphaned keys exist prior to loading the new WASM.",
"implementation": "1. Create CLI command `npm run state:dump` in scripts/state-dump.ts.\n2. Read all persistent keys (jobs, agents, owners) using Soroban RPC getLedgerEntries.\n3. Deserialize raw XDR into typed JSON objects.\n4. Generate SHA-256 state root hash for audit verification.\n5. Output comprehensive summary report of active escrows, balances, and registered agents.",
"criteria": [
"Script successfully connects to testnet RPC and extracts 100% of contract state entries.",
"Decodes XDR ScVal structures into readable TypeScript interfaces.",
"Generates cryptographic state manifest matching contract ledger data.",
"Included in CI pre-deployment pipeline."
]
},
{
"id": 26,
"title": "perf(indexer): optimize SQLite WAL mode checkpoints and concurrent reader connection pooling",
"category": "Backend \u0026 Indexer",
"labels": "backend,indexer,performance",
"difficulty": "Medium",
"skills": "TypeScript, SQLite, Better-SQLite3, Node.js",
"summary": "Fine-tune indexer SQLite database pragmas in indexer/src/db.ts:L15-L18 with automated WAL checkpointing, cache sizing, and separate read-only connection pools to prevent read-write lock contention.",
"motivation": "In indexer/src/db.ts, openDatabase sets journal_mode = WAL, but does not configure wal_autocheckpoint, synchronous mode, or busy_timeout. Under heavy indexing load, concurrent queries from dashboard/server.ts block the poller with SQLITE_BUSY errors, causing event lag.",
"implementation": "1. Configure db.pragma(\u0027synchronous = NORMAL\u0027); db.pragma(\u0027temp_store = MEMORY\u0027); db.pragma(\u0027cache_size = -64000\u0027); (64MB cache).\n2. Set db.pragma(\u0027busy_timeout = 5000\u0027); to prevent instant failures under concurrency.\n3. Implement passive background WAL checkpoint thread running PRAGMA wal_checkpoint(PASSIVE) every 60 seconds.\n4. Export separate read-only database handle for dashboard server queries.",
"criteria": [
"Zero SQLITE_BUSY errors observed during 10,000 simulated concurrent event queries.",
"WAL file size maintained below 10MB via periodic background checkpointing.",
"Query latency for /api/events reduced by at least 40%.",
"Unit tests verify concurrent read-write stability."
]
},
{
"id": 27,
"title": "feat(indexer): add real-time Server-Sent Events (SSE) and WebSocket event streaming server",
"category": "Backend \u0026 Indexer",
"labels": "backend,indexer,enhancement",
"difficulty": "Medium",
"skills": "TypeScript, Express, WebSocket, SSE",
"summary": "Implement an SSE and WebSocket streaming endpoint in indexer/src/index.ts and dashboard/server.ts, broadcasting newly indexed Soroban contract events to subscribed frontend clients instantly.",
"motivation": "Currently, dashboard/public/app.js polls the backend every few seconds to discover job status changes. This causes latency in UI feedback, wastes network bandwidth, and places unnecessary query load on the SQLite event database.",
"implementation": "1. Implement EventHub pub/sub class in indexer/src/events.ts using EventEmitter.\n2. Whenever SorobanEventPoller inserts a new event in db.ts, emit it through EventHub.\n3. Expose GET /api/events/stream (SSE) with filtering by contract, event_type, and address topic.\n4. Implement WebSocket endpoint ws://.../events for bi-directional subscription management.\n5. Include heartbeat keep-alive pings every 30 seconds.",
"criteria": [
"Clients receive event notification within 200ms of on-chain ledger ingestion.",
"SSE stream automatically reconnects with Last-Event-ID resume capability.",
"Memory leak test passes with 100 concurrent SSE subscribers.",
"Dashboard public app updated to subscribe to SSE event stream."
]
},
{
"id": 28,
"title": "fix(indexer): implement chain reorg detection and ledger rollback recovery in SorobanEventPoller",
"category": "Backend \u0026 Indexer",
"labels": "backend,indexer,bug,reliability",
"difficulty": "Hard",
"skills": "TypeScript, Stellar RPC, Consensus",
"summary": "Add ledger hash tracking and rollback handling to indexer/src/poller.ts to safely detect and rewind database state in the event of a ledger reorganization or forked consensus.",
"motivation": "Currently, indexer/src/poller.ts simply tracks lastLedger as a sequential integer in indexer_state. If the Stellar RPC provider switches upstream nodes or experiences a temporary ledger rollback, the indexer will store orphaned events and become desynchronized with ground truth.",
"implementation": "1. Store ledger_sequence AND ledger_hash in indexer_state and events table.\n2. Upon fetching ledger N, verify that previous_ledger_hash matches stored ledger N-1 hash.\n3. If mismatch is detected, initiate rollback: delete events from ledger \u003e= N, rewind lastLedger to last known verified ancestor, and re-poll.\n4. Add structured error logging and metrics counters for reorg events.",
"criteria": [
"Indexer detects simulated ledger hash mismatch and triggers rollback.",
"Orphaned events from invalidated ledgers are purged from database.",
"Poller resumes ingestion cleanly from common ancestor ledger.",
"Unit test simulates 3-ledger reorg and verifies event consistency."
]
},
{
"id": 29,
"title": "feat(agents): implement agent heartbeat liveness monitor and automatic unregister on downtime",
"category": "Backend \u0026 Agents",
"labels": "agents,backend,enhancement",
"difficulty": "Medium",
"skills": "TypeScript, Agents, Health Checks",
"summary": "Build an autonomous agent healthcheck monitor in agents/registry/src/monitor.ts that periodically pings registered agent HTTP endpoints and marks uncontactable agents as offline.",
"motivation": "When buyer agents search the registry for provider agents (e.g. seller-webbuilder, seller-copywriter), they frequently select agents whose servers have crashed, causing buyer escrow jobs to hang and require manual cancellation.",
"implementation": "1. In agents/registry, implement a background poller querying agent metadata URI endpoints (/health) every 60 seconds.\n2. Track consecutive failures: after 3 failed pings, mark agent status = \u0027Offline\u0027 in registry cache.\n3. Expose GET /api/agents?status=Online to filter active providers.\n4. Send automated alert webhook to agent owner when health check fails.",
"criteria": [
"Registry monitors all registered agents without blocking HTTP request threads.",
"Dead agents marked offline within 3 minutes of downtime.",
"Buyer agent CLI filters out offline sellers automatically.",
"Unit tests verify health probe timeouts, retries, and state transitions."
]
},
{
"id": 30,
"title": "sec(api): implement sliding-window rate limiting middleware for mutating API endpoints",
"category": "Backend \u0026 API",
"labels": "backend,security,api",
"difficulty": "Medium",
"skills": "TypeScript, Express, Security",
"summary": "Replace simplistic in-memory rate limiter in dashboard/server.ts:L93-L112 with an accurate sliding-window rate limiter supporting IP and wallet address tracking.",
"motivation": "In dashboard/server.ts, rateLimitMutating uses a fixed-window counter with a single Map. Fixed windows suffer from boundary bursting (double traffic allowed at window reset), and in-memory Maps leak memory over time if inactive IPs are not evicted.",
"implementation": "1. Implement SlidingWindowRateLimiter class with timestamp bucket arrays.\n2. Rate limit based on combined key: req.ip + (req.headers[\u0027x-stellar-wallet\u0027] || \u0027\u0027).\n3. Set HTTP headers: X-RateLimit-Limit, X-RateLimit-Remaining, and Retry-After.\n4. Implement automatic pruning of expired IP entries every 5 minutes to prevent memory leaks.",
"criteria": [
"Prevents burst attacks across window boundaries.",
"Memory consumption remains bounded under 100,000 distinct IP probes.",
"Returns standard RFC-compliant 429 Too Many Requests with Retry-After header.",
"Unit tests verify sliding-window accuracy under high concurrency."
]
},
{
"id": 31,
"title": "fix(api): add idempotent x402 payment verification with nonce deduplication and replay guards",
"category": "Backend \u0026 API",
"labels": "backend,api,security,x402",
"difficulty": "Hard",
"skills": "TypeScript, x402, Stellar SDK, Cryptography",
"summary": "Implement nonce tracking and transaction hash caching in sdk/src/marcPaywall.ts to prevent transaction replay and double-spending across distributed seller agent replicas.",
"motivation": "Currently in sdk/src/marcPaywall.ts, when a client presents an X-Payment header, the payment transaction is verified with the facilitator. If the facilitator response is delayed or network packets are duplicated, malicious clients can attempt to reuse the same signed payment XDR across parallel API calls before on-chain settlement finality.",
"implementation": "1. Extract transaction hash from signed Stellar XDR before submitting to facilitator.\n2. Store txHash in cache with status \u0027PROCESSING\u0027 using atomic compare-and-swap.\n3. Reject duplicate in-flight requests presenting the same txHash with 409 Conflict.\n4. Mark status \u0027SETTLED\u0027 with API response payload cached for idempotent response re-delivery.",
"criteria": [
"Simultaneous parallel requests with the same X-Payment header cannot trigger double execution.",
"Retried requests receive cached idempotent response without re-charging.",
"Memory cache automatically expires settled transactions after 1 hour.",
"Integration tests simulate concurrent replay attack and verify prevention."
]
},
{
"id": 32,
"title": "feat(agents): add exponential backoff retry mechanism with dead-letter queue for seller agents",
"category": "Backend \u0026 Agents",
"labels": "agents,backend,reliability",
"difficulty": "Medium",
"skills": "TypeScript, Agents, Resiliency",
"summary": "Build an automated task retry and failure recovery pipeline in agents/shared.ts for seller agent job processing, routing unrecoverable tasks to a dead-letter queue.",
"motivation": "In agents/seller-*/src, when a seller agent encounters an intermittent LLM API timeout or RPC network error while fulfilling a job deliverable, the process crashes or leaves the job in an unfulfilled state, causing the client to lose patience and cancel.",
"implementation": "1. Implement withRetry(fn, { maxRetries: 5, initialDelayMs: 1000, factor: 2 }) with jitter in agents/shared.ts.\n2. Catch retryable network and rate-limit errors (HTTP 429, 503, ECONNRESET).\n3. If retries are exhausted, serialize job payload and error stack trace to dead_letter_jobs table.\n4. Expose admin endpoint POST /api/agent/dlq/retry to replay failed tasks.",
"criteria": [
"Transient network errors recover without failing the overall escrow job.",
"Exponential backoff with jitter prevents thundering herd on upstream APIs.",
"Dead-letter queue records full error diagnostics and execution context.",
"Unit tests verify retry sequence, delay calculation, and DLQ persistence."
]
},
{
"id": 33,
"title": "feat(agents): implement autonomous multi-agent task orchestration pipeline",
"category": "Backend \u0026 Agents",
"labels": "agents,backend,enhancement,Stellar Wave",
"difficulty": "Hard",
"skills": "TypeScript, Multi-Agent Systems, LangChain",
"summary": "Create a high-level Orchestrator Agent in agents/orchestrator/ that takes complex user goals, decomposes them into a directed acyclic graph (DAG) of sub-tasks, and hires specialized seller agents via Bear Protocol.",
"motivation": "Currently, buyer-agent.ts in demo/ only executes a single hardcoded task sequence with a single seller. Real-world autonomous operations require an orchestrator that can break \u0027Launch a new product\u0027 into \u0027Brand Naming\u0027 (seller-namer) -\u003e \u0027Copywriting\u0027 (seller-copywriter) -\u003e \u0027Landing Page\u0027 (seller-webbuilder), escrowing funds sequentially.",
"implementation": "1. Create OrchestratorAgent class with task planning LLM prompt.\n2. Query registry for agents matching required skills (e.g. namer, copywriter).\n3. Construct DAG where task N+1 depends on deliverable of task N.\n4. Escrow jobs on-chain sequentially, feeding intermediate outputs into downstream agent requests.\n5. Aggregate final deliverable report for the end user.",
"criteria": [
"Orchestrator successfully decomposes multi-step project into 3 distinct sub-jobs.",
"Escrows funds on Soroban testnet for each sub-agent as prerequisites complete.",
"Handles partial failure: if step 2 fails, pauses downstream execution cleanly.",
"Full end-to-end integration demo script running in demo/multi-agent.ts."
]
},
{
"id": 34,
"title": "feat(api): integrate OpenTelemetry distributed tracing across agent HTTP and x402 requests",
"category": "Backend \u0026 API",
"labels": "backend,api,devops,observability",
"difficulty": "Medium",
"skills": "TypeScript, OpenTelemetry, Observability",
"summary": "Instrument dashboard/server.ts, indexer, and seller agents with OpenTelemetry SDK to generate distributed trace spans for x402 payment flows and Soroban RPC calls.",
"motivation": "Debugging multi-agent transactions across buyer, seller, indexer, and Stellar RPC nodes is currently difficult due to fragmented console logs. Distributed tracing allows operators to visualize latency bottlenecks and failure points across the entire micropayment lifecycle.",
"implementation": "1. Install @opentelemetry/api and @opentelemetry/sdk-trace-node in root workspace.\n2. Propagate traceparent headers across marcFetch and marcPaywall HTTP requests.\n3. Create custom spans for Stellar RPC simulation, transaction submission, and database queries.\n4. Export trace data via OTLP to Jaeger / Grafana Tempo.",
"criteria": [
"Every agent API request contains traceparent correlation ID.",
"Visual waterfall trace shows exact breakdown of x402 verification, LLM execution, and on-chain submission.",
"Trace overhead benchmarked under 2ms per request.",
"Configuration guide documented in docs/OBSERVABILITY.md."
]
},
{
"id": 35,
"title": "sec(agents): add AWS KMS and HashiCorp Vault remote signing integration for agent keys",
"category": "Backend \u0026 Agents",
"labels": "agents,security,infrastructure",
"difficulty": "Hard",
"skills": "TypeScript, AWS KMS, Security, Cryptography",
"summary": "Build an enterprise RemoteSigner class in sdk/src/signer.ts allowing agents to sign Stellar transactions using hardware security modules (AWS KMS / HashiCorp Vault) rather than plaintext secret keys.",
"motivation": "In demo/buyer-agent.ts and demo/seller-agent.ts, agents load private keys directly from environment variables (Keypair.fromSecret(process.env.SECRET_KEY)). In cloud environments, plaintext memory keys are vulnerable to process inspection, accidental logging, and server compromise.",
"implementation": "1. Implement RemoteSigner interface matching Stellar Signer contract.\n2. Add AwsKmsSigner implementing Ed25519 signature generation via AWS KMS Sign API.\n3. Add VaultSigner supporting HashiCorp Vault Transit engine.\n4. Update IdentityClient and CommerceClient to accept generic Signer interface alongside Keypair.\n5. Include local mock KMS test suite.",
"criteria": [
"Agent can register, fund jobs, and sign x402 headers without holding raw private keys in memory.",
"Hardware-enforced signature audit trail preserved in cloud provider logs.",
"Zero plaintext secret leakage in memory dumps or error logs.",
"Unit tests verify valid Stellar signature generation using mocked KMS response."
]
},
{
"id": 36,
"title": "sec(api): implement Stellar SEP-0010 Web Authentication challenge-response for dashboard API",
"category": "Backend \u0026 API",
"labels": "backend,api,security,compliance",
"difficulty": "Medium",
"skills": "TypeScript, SEP-0010, Stellar SDK, JWT",
"summary": "Upgrade dashboard session authentication in dashboard/lib/auth.ts to strictly adhere to Stellar ecosystem standard SEP-0010 (Stellar Web Authentication).",
"motivation": "Currently in dashboard/lib/auth.ts:L36-L44, authentication uses a custom nonce challenge. Standard Stellar wallets (Freighter, Albedo, Lobstr) natively support SEP-0010 challenge transactions, enabling single-click secure signing with domain verification.",
"implementation": "1. Implement GET /api/auth/challenge generating a SEP-0010 challenge transaction with home_domain and server signing key.\n2. Implement POST /api/auth/token verifying wallet signature on the challenge transaction using Utils.verifyChallengeTx.\n3. Issue signed JWT session token with 24-hour expiration.\n4. Update requireAuth middleware to validate JWT signature and claims.",
"criteria": [
"Authentication flow conforms 100% to SEP-0010 specification.",
"Freighter wallet displays official domain verification warning rather than raw arbitrary text.",
"Replay attacks prevented via time bounds and challenge transaction sequence numbers.",
"Unit tests verify valid and expired challenge transaction verification."
]
},
{
"id": 37,
"title": "feat(indexer): build on-chain agent reputation scoring engine based on completion rate",
"category": "Backend \u0026 Indexer",
"labels": "backend,indexer,enhancement",
"difficulty": "Medium",
"skills": "TypeScript, Algorithms, SQL",
"summary": "Create a reputation scoring algorithm in indexer/src/reputation.ts that computes dynamic trustworthiness ratings for agents based on historical job completions, disputes, and response times.",
"motivation": "Clients selecting provider agents have no objective metric to judge reliability. Incorporating an on-chain algorithmic reputation score incentivizes providers to deliver quality work promptly and penalizes ghosting or disputes.",
"implementation": "1. Aggregate historical metrics per agent: total_jobs, completed_jobs, cancelled_jobs, disputed_jobs, avg_completion_time_secs.\n2. Compute normalized score (0 - 100) using Bayesian average: Score = (C * m + sum(ratings)) / (C + n).\n3. Expose GET /api/agents/:id/reputation with score breakdown and percentile rank.\n4. Update indexer to recalculate scores upon every JobCompleted / JobDisputed event.",
"criteria": [
"Reputation score updates in real-time as jobs settle.",
"Bayesian prior prevents new agents with 1 job from falsely outranking established agents with 100 jobs.",
"Disputed or cancelled jobs penalize agent score deterministically.",
"Unit tests verify mathematical stability and edge cases (zero jobs, 100% disputes)."
]
},
{
"id": 38,
"title": "sec(api): add automated deliverable content inspection and payload validation pipeline",
"category": "Backend \u0026 API",
"labels": "backend,api,security",
"difficulty": "Medium",
"skills": "TypeScript, Security, Content Validation",
"summary": "Implement an automated validation pipeline in backend API inspecting deliverable URIs for malicious payloads, phishing URLs, oversized files, and invalid formats before evaluator notification.",
"motivation": "In contracts/agentic-commerce, deliverable is an arbitrary string. If a malicious seller submits a link pointing to malware, an IP logger, or an exploit kit, human or automated evaluators clicking the link in the dashboard could be compromised.",
"implementation": "1. Create DeliverableValidator service in dashboard/lib/validator.ts.\n2. Validate URI protocols: strictly allow https:// and ipfs://.\n3. Check URLs against Google Safe Browsing API / VirusTotal API.\n4. For IPFS hashes, verify MIME type and enforce 50MB file size limit before fetching.\n5. Flag suspicious deliverables with warning badges in the dashboard.",
"criteria": [
"Dangerous schemes (javascript:, file:, data:) rejected immediately.",
"Known malicious URLs flagged before evaluator review.",
"Oversized deliverables rejected to prevent browser memory exhaustion.",
"Unit tests cover malicious payloads, SSRF attempts, and valid IPFS hashes."
]
},
{
"id": 39,
"title": "feat(indexer): implement PostgreSQL database adapter for production scalable indexing",
"category": "Backend \u0026 Indexer",
"labels": "backend,indexer,infrastructure",
"difficulty": "Hard",
"skills": "TypeScript, PostgreSQL, SQL, Prisma/Kysely",
"summary": "Create a PostgreSQL storage adapter in indexer/src/db-postgres.ts allowing enterprise deployments to run distributed indexer instances with connection pooling and high availability.",
"motivation": "While SQLite in indexer/src/db.ts is excellent for local development and single-node demos, production multi-replica cloud clusters (Kubernetes) require a centralized, concurrent SQL database with replica read pools and automated backups.",
"implementation": "1. Define DatabaseAdapter interface abstracting insertEvent, getEvents, and getIndexerState.\n2. Implement PostgresAdapter using pg or pg-promise with connection pooling.\n3. Provide idempotent SQL migration scripts in indexer/migrations/postgres/.\n4. Add environment variable DATABASE_URL toggle selecting between SQLite and Postgres.",
"criteria": [
"Indexer functions identically with either SQLite or PostgreSQL backing store.",
"Supports 500 concurrent read queries without database connection exhaustion.",
"PostgreSQL docker container included in docker-compose.yml for easy local testing.",
"Integration tests run against ephemeral test PostgreSQL instance."
]
},
{
"id": 40,
"title": "feat(api): add Prometheus metrics endpoint (/metrics) for indexer and API health monitoring",
"category": "Backend \u0026 API",
"labels": "backend,api,devops,observability",
"difficulty": "Medium",
"skills": "TypeScript, Prometheus, Express, DevOps",
"summary": "Expose a Prometheus-compatible /metrics endpoint in dashboard/server.ts and indexer tracking RPC latency, event ingestion rates, active jobs, and error counts.",
"motivation": "Production operations require visibility into indexer health, RPC failure rates, and payment throughput to alert on-call engineers before system outages affect users.",
"implementation": "1. Install prom-client in dashboard and indexer workspaces.\n2. Define metrics: stellar_events_ingested_total, stellar_rpc_request_duration_seconds, active_escrow_jobs_gauge, http_requests_total.\n3. Expose GET /metrics protected by optional bearer token.\n4. Provide ready-to-use Grafana dashboard JSON in docs/grafana-dashboard.json.",
"criteria": [
"/metrics endpoint returns standard Prometheus exposition text format.",
"Counters accurately increment on event ingestion and API requests.",
"Includes histogram bucket distributions for Soroban RPC call latency.",
"Grafana dashboard imports cleanly and visualizes real-time protocol activity."
]
},
{
"id": 41,
"title": "feat(agents): implement outbound webhook notification dispatcher for new escrow jobs",
"category": "Backend \u0026 Agents",
"labels": "agents,backend,enhancement",
"difficulty": "Medium",
"skills": "TypeScript, Webhooks, Security, HMAC",
"summary": "Build a webhook delivery system in indexer/src/webhooks.ts that sends signed HTTP POST notifications to registered agent URLs whenever a new escrow job is assigned to them.",
"motivation": "Currently, seller agents must continuously poll the indexer or Soroban RPC to detect when a client has created a job for them. Webhooks allow seller agents to remain passive until work arrives, reducing idle compute and RPC load.",
"implementation": "1. Allow agents to configure webhook_url and webhook_secret in agent metadata.\n2. When indexer processes JobCreated event, look up provider webhook URL.\n3. Dispatch HTTP POST with payload: { event: \u0027JobCreated\u0027, jobId, budget, client, description }.\n4. Sign request body with HMAC-SHA256 signature in X-Bear-Signature header.\n5. Implement retry schedule (3 attempts with exponential backoff) on 5xx failures.",
"criteria": [
"Provider agents receive webhook notification within 1 second of job creation.",
"HMAC-SHA256 signature enables providers to verify authenticity and prevent spoofing.",
"Failed webhooks retry gracefully without crashing the indexer poller.",
"Unit tests verify HMAC signature generation and retry logic."
]
},
{
"id": 42,
"title": "feat(agents): implement autonomous job expiration watcher daemon with automated refund triggers",
"category": "Backend \u0026 Agents",
"labels": "agents,backend,automation",
"difficulty": "Medium",
"skills": "TypeScript, Stellar SDK, Automation",
"summary": "Create a background daemon service in agents/watcher/ that monitors expired jobs and automatically calls cancel() or expire_job() on-chain to refund stalled client funds.",
"motivation": "When a provider fails to submit by the agreed deadline, funds remain locked until the client manually connects their wallet and signs a cancel transaction. An automated protocol keeper bot ensures capital is promptly returned to clients without manual intervention.",
"implementation": "1. Build JobExpirationWatcher service polling indexer for Funded jobs where current_time \u003e created_at + timeout.\n2. Verify on-chain job status via CommerceClient.getJob(id).\n3. Assemble and submit cancel or expire transaction using keeper wallet keypair.\n4. Log refunded amount and notify client address via event log.",
"criteria": [
"Daemon identifies expired jobs and triggers refund within 5 minutes of timeout.",
"Keeper wallet handles transaction fee sponsorship via Stellar Fee Bump transactions.",
"Concurrency guards prevent duplicate transaction submissions for the same job.",
"Unit tests simulate job expiration and verify automated cancellation."
]
},
{
"id": 43,
"title": "feat(agents): add IPFS and Arweave pinning service integration for agent metadata URIs",
"category": "Backend \u0026 Agents",
"labels": "agents,backend,infrastructure",
"difficulty": "Medium",
"skills": "TypeScript, IPFS, Arweave, Decentralized Storage",
"summary": "Build an automated storage client in sdk/src/storage.ts supporting Pinata, Web3.Storage, and Arweave for persistent pinning of agent metadata and job deliverables.",
"motivation": "In demo/seller-agent.ts, metadata URIs use placeholder IPFS links or ephemeral localhost URLs. In production, unpinned IPFS files get purged by garbage collection, causing agent profiles and job deliverables to become inaccessible.",
"implementation": "1. Implement StorageProvider interface with uploadJson(data) and uploadBuffer(buffer).\n2. Provide PinataStorageProvider and ArweaveStorageProvider implementations.\n3. Compute deterministic IPFS CIDv1 before upload.\n4. Add CLI helper npm run agent:publish-metadata in agents/registry.",
"criteria": [
"Metadata uploads return permanent, resolvable IPFS/Arweave URIs.",
"Uploaded content verified by fetching back and comparing SHA-256 hash.",
"Fallback between multiple pinning gateways if primary service is down.",
"SDK documentation updated with storage configuration guide."
]
},
{
"id": 44,
"title": "feat(agents): implement semantic matchmaking engine for agent discovery using embeddings",
"category": "Backend \u0026 Agents",
"labels": "agents,backend,ai,enhancement",
"difficulty": "Hard",
"skills": "TypeScript, Vector Embeddings, NLP, Agent Discovery",
"summary": "Build a semantic search API endpoint in dashboard/server.ts using text embeddings to match user natural language requests with the most capable registered agents.",
"motivation": "Currently in dashboard/server.ts and public/app.js:L40, agent searching relies on simple substring matching on agent name. Users describing complex needs (e.g. \u0027I need someone to summarize Stellar governance proposals\u0027) fail to discover relevant agents whose descriptions don\u0027t share exact keywords.",
"implementation": "1. When agents register, generate 384-dimensional text embeddings of their metadata description using a lightweight local embedding model (e.g. transformers.js).\n2. Store embeddings in SQLite with sqlite-vec extension or in-memory vector index.\n3. Expose POST /api/agents/match accepting { query: string, topK: number }.\n4. Compute cosine similarity and return ranked list of best-fit agents with similarity scores.",
"criteria": [
"Natural language queries successfully return semantically related agents.",
"Search latency under 50ms for 1,000 registered agents.",
"Gracefully falls back to lexical search if embedding engine is disabled.",
"Unit tests verify ranking accuracy across domain-specific test prompts."
]
},
{
"id": 45,
"title": "feat(agents): provide Fastify and Hono server adapters for seller agent development",
"category": "Backend \u0026 Agents",
"labels": "agents,backend,developer-experience",
"difficulty": "Medium",
"skills": "TypeScript, Fastify, Hono, SDK",
"summary": "Create production-ready Fastify and Hono boilerplate templates in agents/templates/ for developers building high-throughput seller agents with x402 paywalls.",
"motivation": "All current seller agents (copywriter, webbuilder, etc.) are implemented using Express. Developers building modern edge or serverless microservices require modern web frameworks (Fastify, Hono) for superior throughput and native TypeScript ergonomics.",
"implementation": "1. Build Fastify seller agent scaffold in agents/templates/fastify-seller/.\n2. Build Hono seller agent scaffold in agents/templates/hono-seller/ (compatible with Cloudflare Workers / Node).\n3. Wire marcPaywallFastify and marcPaywallHono middleware.\n4. Include Dockerfile and comprehensive README with deployment instructions.",
"criteria": [
"Fastify and Hono agent templates compile and start clean with npm run dev.",
"x402 paywall middleware correctly issues HTTP 402 and validates Stellar payments.",
"Benchmarking reveals \u003e2x RPS throughput compared to legacy Express templates.",
"Comprehensive test suite included in each template."
]
},
{
"id": 46,
"title": "feat(api): generate automated revenue analytics and transaction accounting export (CSV/JSON)",
"category": "Backend \u0026 API",
"labels": "backend,api,enhancement",
"difficulty": "Medium",
"skills": "TypeScript, Express, Accounting",
"summary": "Add financial accounting and tax reporting export endpoints in dashboard/server.ts, allowing agent owners to download full CSV/JSON audit trails of all received payments and protocol fees.",
"motivation": "Operators running commercial seller agents must account for revenue, currency conversions, and protocol fees for tax and financial auditing. Currently, there is no exportable transaction ledger in the dashboard.",
"implementation": "1. Implement GET /api/reports/revenue?wallet=...\u0026from=...\u0026to=...\u0026format=csv.\n2. Query indexer for all JobCompleted events involving the specified wallet as provider or client.\n3. Format CSV columns: Timestamp, TransactionHash, Ledger, JobId, Role, Token, GrossAmount, FeeAmount, NetAmount.\n4. Include daily and monthly revenue aggregate summaries.",
"criteria": [
"CSV and JSON export formats generated accurately according to RFC 4180.",
"Gross, fee, and net balance numbers reconcile 100% with on-chain token transfers.",
"Supports date range filtering and pagination.",
"Unit tests verify CSV formatting and financial reconciliation."
]
},
{
"id": 47,
"title": "fix(agents): implement POSIX signal handling (SIGTERM/SIGINT) for zero-downtime agent shutdown",
"category": "Backend \u0026 Agents",
"labels": "agents,backend,bug,reliability",
"difficulty": "Medium",
"skills": "TypeScript, Node.js, Systems",
"summary": "Add graceful shutdown lifecycle handling across all seller agents in agents/ to finish in-flight jobs and close database connections before exiting upon SIGTERM/SIGINT.",
"motivation": "When agents deployed in Kubernetes or Docker containers are restarted during deployments, SIGTERM signals currently terminate the Node.js process immediately, aborting active x402 payment settlements and corrupting local SQLite task state.",
"implementation": "1. Implement registerGracefulShutdown(server, activeTaskTracker, db) in agents/shared.ts.\n2. On SIGTERM or SIGINT, stop accepting new HTTP requests (server.close).\n3. Wait up to 15 seconds for active job processing and on-chain submissions to complete.\n4. Gracefully close SQLite handles and flush log buffers before calling process.exit(0).",
"criteria": [
"In-flight jobs complete successfully during rolling container updates.",
"No SQLite database corruption occurs on unexpected container termination.",
"Process exits cleanly with code 0 within configured timeout window.",
"Unit tests simulate SIGTERM during active task execution."
]
},
{
"id": 48,
"title": "feat(indexer): implement automated database migration runner for indexer schema evolution",
"category": "Backend \u0026 Indexer",
"labels": "backend,indexer,infrastructure",
"difficulty": "Medium",
"skills": "TypeScript, SQLite, Database Migrations",
"summary": "Replace hardcoded CREATE TABLE IF NOT EXISTS in indexer/src/db.ts:L19-L46 with a formal, versioned migration runner supporting forward and rollback migrations.",
"motivation": "In indexer/src/db.ts, schema updates are embedded in a single hardcoded exec() string. Adding columns (e.g. deliverable_hash, version, duration) to existing production databases without dropping tables currently requires fragile manual SQL scripts.",
"implementation": "1. Create indexer/migrations/ directory with numbered SQL files: 001_initial.sql, 002_add_hash.sql, etc.\n2. Create schema_migrations table tracking applied migration version numbers and timestamps.\n3. Implement runMigrations(db) executing pending migrations in atomic transactions.\n4. Support dry-run mode and rollback capabilities.",
"criteria": [
"New database initialized cleanly from baseline migrations.",
"Existing databases seamlessly upgraded without data loss.",
"Failed migrations automatically roll back transaction and halt startup.",
"Unit tests verify sequential migration execution and rollback safety."
]
},
{
"id": 49,
"title": "fix(indexer): resolve database lock contention by isolating event write transactions",
"category": "Backend \u0026 Indexer",
"labels": "backend,indexer,bug,performance",
"difficulty": "Medium",
"skills": "TypeScript, SQLite, Concurrency",
"summary": "Refactor indexer batch insertion in indexer/src/poller.ts to wrap event batches in single IMMEDIATE transactions rather than per-event autocommit inserts.",
"motivation": "In indexer/src/poller.ts, events are inserted one-by-one inside a loop. Each individual insert acquires and releases SQLite database locks, resulting in hundreds of filesystem fsync operations per ledger and blocking dashboard reader queries.",
"implementation": "1. In indexer/src/db.ts, create insertEventsBatch prepared transaction helper using db.transaction((events) =\u003e { ... }).\n2. Use BEGIN IMMEDIATE to prevent deadlock between concurrent writer processes.\n3. Update poller.ts to commit entire ledger event batches in a single atomic transaction.\n4. Benchmark write throughput before and after optimization.",
"criteria": [
"Batch insertion of 100 events executes in a single SQLite transaction.",
"Ledger processing time reduced from ~1,200ms to \u003c150ms per batch.",
"Zero transaction deadlocks under concurrent read traffic.",
"Unit tests verify atomicity: all events in a ledger batch persist or none do."
]
},
{
"id": 50,
"title": "feat(agents): add strict runtime environment and configuration schema validation using Zod",
"category": "Backend \u0026 Agents",
"labels": "agents,backend,developer-experience",
"difficulty": "Medium",
"skills": "TypeScript, Zod, Validation",
"summary": "Implement comprehensive environment variable and configuration schema validation using Zod across all agent crates and dashboard/server.ts.",
"motivation": "Agents currently read process.env directly with sparse fallback defaults. Misconfigured environment variables (e.g. invalid Stellar secret key format, malformed RPC URL, missing port) cause runtime crashes deep inside execution instead of failing fast at startup with helpful error messages.",
"implementation": "1. Define AgentConfigSchema using Zod validating STELLAR_RPC_URL, NETWORK_PASSPHRASE, SECRET_KEY, CONTRACT_ADDRESSES, and PORT.\n2. Validate process.env at boot in config.ts, formatting Zod validation errors into readable terminal tables.\n3. Check that Stellar public keys are valid StrKey Ed25519 format.\n4. Add .env.schema documentation file.",
"criteria": [
"Application fails fast at boot with clear error messages if required env vars are missing or invalid.",
"Exported config object is 100% strictly typed without any \u0027as string\u0027 type assertions.",
"Unit tests cover valid configurations and common user misconfigurations.",
"Sample .env.example files verified against Zod schemas in CI."
]
},
{
"id": 51,
"title": "feat(dashboard): integrate Stellar Wallets Kit supporting Freighter, xBull, and Albedo wallets",
"category": "Frontend \u0026 Dashboard",
"labels": "dashboard,frontend,enhancement",
"difficulty": "Medium",
"skills": "JavaScript, Stellar Wallets Kit, Web3 UI",
"summary": "Upgrade Stellar Wallets Kit in dashboard/public/app.js:L57-L105 with multi-wallet modal selector supporting Freighter, xBull, Albedo, and Lobstr wallets.",
"motivation": "In dashboard/public/app.js, wallet connection relies on hardcoded Freighter checks with partial fallback. Users with alternative popular Stellar wallets (xBull, Albedo) cannot connect, sign transactions, or interact with escrow jobs in the dashboard.",
"implementation": "1. Configure StellarWalletsKit with modules: [new FreighterModule(), new XbullModule(), new AlbedoModule(), new LobstrModule()].\n2. Render responsive wallet modal with provider brand icons.\n3. Persist selected wallet type in localStorage for auto-reconnection.\n4. Handle wallet account switching and network mismatch events.",
"criteria": [
"Users can connect with any major Stellar wallet provider.",
"Auto-detects installed wallet browser extensions.",
"Prompts user if wallet network does not match dashboard target network (Testnet vs Mainnet).",
"UI tested across Chrome, Firefox, and mobile Brave browser."
]
},
{
"id": 52,
"title": "feat(dashboard): add optimistic UI updates and live state transitions for escrow actions",
"category": "Frontend \u0026 Dashboard",
"labels": "dashboard,frontend,enhancement",
"difficulty": "Medium",
"skills": "JavaScript, DOM, UX, Optimistic UI",
"summary": "Implement optimistic UI state mutations in dashboard/public/app.js for job creation, submission, and completion actions while on-chain transactions confirm.",
"motivation": "Stellar testnet ledger closing times take 4-5 seconds. Currently, when a user clicks \u0027Approve Job\u0027 or \u0027Fund Escrow\u0027, the dashboard shows a static spinner with no immediate feedback, leading users to believe the app is unresponsive or double-click action buttons.",
"implementation": "1. Immediately update local state and DOM to show target state with an \u0027In-Flight / Pending\u0027 badge upon signing.\n2. Display non-intrusive progress toast with link to Stellar Expert block explorer.\n3. If transaction confirms, promote optimistic state to confirmed.\n4. If transaction reverts, rollback local state and display actionable error alert.",
"criteria": [
"Buttons immediately disable and show pending animation upon click.",
"UI reflects optimistic state within 50ms of user action.",
"Graceful rollback with error toast if RPC transaction submission fails.",
"Manual testing verifies zero double-submission under rapid clicking."
]
},
{
"id": 53,
"title": "feat(dashboard): create interactive job lifecycle visualizer with real-time status stepper",
"category": "Frontend \u0026 Dashboard",
"labels": "dashboard,frontend,ui",
"difficulty": "Medium",
"skills": "JavaScript, CSS, SVG, UI Design",
"summary": "Build an animated, interactive job lifecycle stepper component in dashboard/public/app.js visualizing the progression: Created -\u003e Funded -\u003e Submitted -\u003e Evaluated -\u003e Settled.",
"motivation": "In dashboard/public/app.js, job statuses are shown as plain text pills. Users and evaluators lack a clear visual understanding of where a job sits in its lifecycle, who holds the action item (client, provider, or evaluator), and what transitions remain.",
"implementation": "1. Create SVG/CSS horizontal stepper component with animated connector lines.\n2. Highlight current active step with pulsing glow and role indicator (e.g. \u0027Waiting on Evaluator Approval\u0027).\n3. Show timestamp and transaction hash link for each completed stage.\n4. Support branched paths for Disputed and Cancelled states.",
"criteria": [
"Visual stepper renders cleanly on both desktop and mobile viewports.",
"Transitions animate smoothly when job status changes.",
"Tooltips display ledger timestamps and transaction hashes on completed steps.",
"Accessible for screen readers with proper ARIA attributes."
]
},
{
"id": 54,
"title": "feat(dashboard): add pre-flight transaction simulation and gas fee estimation modal",
"category": "Frontend \u0026 Dashboard",
"labels": "dashboard,frontend,enhancement",
"difficulty": "Medium",
"skills": "JavaScript, Stellar SDK, UX",
"summary": "Implement a transaction pre-flight simulation modal in dashboard/public/app.js showing estimated network fees, contract CPU instructions, and balance diffs before prompting wallet signature.",
"motivation": "Currently, when a user creates or approves a job, the transaction is sent directly to the wallet without explaining exact fee deductions or checking whether the transaction will fail, leading to confusing wallet rejection errors.",
"implementation": "1. Call rpc.Server.simulateTransaction() before opening wallet sign modal.\n2. Parse simulation result: extract CPU instructions, memory bytes, and minResourceFee.\n3. Display confirmation modal detailing: Action, Target Contract, Budget Amount, Network Fee (XLM), and Projected Balances.\n4. If simulation fails, display Soroban contract error explanation instead of submitting.",
"criteria": [
"Simulation modal displays accurate network fee and resource consumption breakdown.",
"Detects failed transactions (e.g. insufficient token balance) and blocks wallet prompt.",
"User can review and cancel before triggering wallet popup.",
"Unit tests verify simulation parsing and error extraction."
]
},
{
"id": 55,
"title": "feat(dashboard): build comprehensive Agent Performance analytics dashboard with SVG charts",
"category": "Frontend \u0026 Dashboard",
"labels": "dashboard,frontend,analytics",
"difficulty": "Medium",
"skills": "JavaScript, SVG, Charts, Analytics",
"summary": "Add an Analytics view to dashboard/public/app.js featuring lightweight SVG charts for protocol daily volume, active jobs count, average settlement time, and top-earning agents.",
"motivation": "The dashboard currently only lists raw tabular data of agents and jobs. Protocol stakeholders, investors, and prospective clients need high-level macroeconomic visibility into protocol growth, liquidity velocity, and provider performance.",
"implementation": "1. Add \u0027Analytics\u0027 tab to dashboard navigation sidebar.\n2. Build zero-dependency SVG chart helpers (BarChart, LineChart, DonutChart) matching Bear design system.\n3. Query /api/stats/historical endpoint for 30-day volume and transaction metrics.\n4. Display key performance indicator (KPI) metric cards with month-over-month trend indicators.",
"criteria": [
"Charts render crisp SVG graphics with responsive resizing across window dimensions.",
"Zero external heavyweight charting libraries (Chart.js, D3) to preserve fast page load (\u003c100ms).",
"Interactive hover tooltips displaying date, volume (USDC), and job count.",
"Tested with light and dark dashboard themes."
]
},
{
"id": 56,
"title": "fix(dashboard): audit and resolve WCAG 2.1 AAA accessibility contrast issues in dark/light themes",
"category": "Frontend \u0026 Dashboard",
"labels": "dashboard,frontend,accessibility,bug",
"difficulty": "Medium",
"skills": "CSS, Accessibility, WCAG, Design",
"summary": "Conduct a complete WCAG 2.1 AAA accessibility audit on dashboard/public/style.css, resolving low-contrast text elements, missing focus indicators, and aria labels.",
"motivation": "In dashboard/public/style.css, several muted text colors (e.g. --text-muted on card backgrounds) have contrast ratios below 3.5:1, failing accessibility standards for visually impaired users and preventing formal enterprise compliance.",
"implementation": "1. Audit color palette with Lighthouse and axe-core accessibility tools.\n2. Adjust CSS variables: ensure text contrast ratio \u003e= 7:1 for normal text and \u003e= 4.5:1 for large text.\n3. Add high-visibility keyboard focus rings (:focus-visible) for all interactive buttons and inputs.\n4. Ensure all icon-only buttons have descriptive aria-label attributes.",
"criteria": [
"Lighthouse Accessibility audit score reaches 100/100 on both dark and light modes.",
"Zero color contrast violations detected by axe DevTools.",
"Full keyboard navigation possible across all tabs, modals, and forms.",
"Tested with screen reader (NVDA / VoiceOver)."
]
},
{
"id": 57,
"title": "fix(dashboard): improve mobile responsiveness with adaptive card layouts for transaction tables",
"category": "Frontend \u0026 Dashboard",
"labels": "dashboard,frontend,mobile,ui",
"difficulty": "Medium",
"skills": "CSS, Responsive Design, Mobile UX",
"summary": "Refactor the jobs and events data tables in dashboard/public/index.html to automatically morph into touch-friendly cards on screens below 768px width.",
"motivation": "The current desktop table layout in dashboard/public/app.js causes severe horizontal overflow on mobile viewports, truncating Stellar wallet addresses and making action buttons difficult to tap on mobile browsers.",
"implementation": "1. In style.css, implement CSS media query (@media (max-width: 768px)) for data tables.\n2. Convert table rows to card containers using CSS Grid / Flexbox.\n3. Truncate long Stellar public keys with copy-to-clipboard tap targets.\n4. Optimize button sizes (minimum 44x44px touch target) for mobile ergonomics.",
"criteria": [
"Zero horizontal window scroll on viewports from 320px to 768px.",
"All job metadata (client, provider, budget, status) readable without truncation.",
"Action buttons easy to tap with one hand on mobile devices.",
"Tested on simulated iPhone, iPad, and Android device viewports."
]
},
{
"id": 58,
"title": "feat(dashboard): implement global React error boundaries and offline fallback status banners",
"category": "Frontend \u0026 Dashboard",
"labels": "dashboard,frontend,reliability",
"difficulty": "Medium",
"skills": "JavaScript, UX, Error Handling",
"summary": "Implement network connectivity detection and global error boundary screens in dashboard/public/app.js to gracefully handle RPC outages and offline states.",
"motivation": "If a user\u0027s internet disconnects or the Stellar testnet RPC experiences a transient outage, the dashboard currently fails silently, leaving white screens or frozen loading indicators with no explanation.",
"implementation": "1. Listen to window.navigator.onLine and \u0027online\u0027/\u0027offline\u0027 browser events.\n2. Display sticky top banner: \u0027Network Disconnected — Retrying connection to Stellar RPC...\u0027.\n3. Wrap API fetch calls in global try-catch handler rendering an actionable \u0027Something went wrong\u0027 view with a \u0027Retry\u0027 button.\n4. Add healthcheck probe to verify RPC node availability on startup.",
"criteria": [
"Offline banner appears immediately when network disconnects.",
"Dashboard automatically resumes polling and refreshes data when connectivity is restored.",
"Clear error screens replace blank white page on uncaught JavaScript errors.",
"Manual testing verifies graceful offline degradation."
]
},
{
"id": 59,
"title": "feat(dashboard): add built-in interactive x402 API monetization testing playground",
"category": "Frontend \u0026 Dashboard",
"labels": "dashboard,frontend,x402,developer-experience",
"difficulty": "Medium",
"skills": "JavaScript, x402, Stellar SDK, Playground",
"summary": "Build an interactive x402 API tester inside the dashboard allowing developers to simulate HTTP 402 payment requirements, inspect payment headers, and test automated micro-settlements.",