-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Replit Bounty #11
Comments
We should price it at 2701 to stay on top I think. I think your plan is good but my concern is that for that pricing it should be a pretty sizable task. And we need a super super detailed spec to get our money's worth. |
I like that lmao 2701 🤣
Okay okay. I have opened a task for I can keep that task and change the spec and we can use something else or maybe it is sufficient enough so long as the storage layer aspect is spec'd right? Other options are to collect big tasks from around the org, remove their label or create something unique and ensure the spec or either is like a roadmap Whatever we do it should be a TS task and related to the bot. We have plugins and AI tasks which fit this criteria. I think they'll attract two different demographics of devs with the AI side likely being of lesser quality but that's a heavy assumption |
We don't have a lot of big tasks available priced or not but these seem like good candidates for large tasks
So we are limited for these reasons for pulling existing tasks. I will try to think of more feature-rich plugins which we'd actually use We could expand on So it could be configurable to alert org members/roles for pretty much any reason, for example:
All of the above could be done programmatically. I'm trying to think how we could embed an AI feature into it other than the obvious like workflow failure evaluation. With some help from GPT4:
|
I need to have a think on this but the XP system comes to mind. It's something we put off for a very long time, requires storage, and provides value to our strategic milestones. |
Why don't we just add XP modifiers in a JSON file? User ID would be the most robust but least readable. We can just make something like this: type XPModifier = number;
type XP = {
[userId: string]: {
[issueId: string]: XPModifier
}
}; {
"4975670": {
"2480425417": -50
}
} Then the XP plugin ideally can sum up the total rewards generated for every user (GraphQL query?) and then apply the XP modifiers. It can recalculate every time XP is queried, assuming getting all the data is fast. If not, then we will need to cache to this file. type XPModifier = number;
type Reward = number;
type XP = {
[userId: string]: {
totalReward: Reward;
tasks: {
[issueId: string]: {
xpModifier: XPModifier;
reward: Reward;
}
}
}
}; {
"4975670": {
"totalReward": 150.50,
"tasks": {
"2480425417": {
"xpModifier": -50,
"reward": 100.00
},
"2480425418": {
"xpModifier": 25,
"reward": 50.50
}
}
},
"4975671": {
"totalReward": 75.25,
"tasks": {
"2480425419": {
"xpModifier": 10,
"reward": 75.25
}
}
}
} Another wild idea for the future: what if we stored the database within the XP plugin repository? Then it can easily support global XP across all organizations. For now though, lets store within each organization config repo. |
I initially assumed the XP system would be designed to be global from the start. Wasn't the primary goal to allow a user, deemed "worthy" through contributions to one partner (e.g., Ubiquity), to retain their status across all partners? We have two large concepts at play here maybe it's better to use a dedicated XP system task to hash out the specifics of it and the plugin could be built around it. Where and how are the XP levels used within the eco-system? Is it to give distinction to users within a partner's own userbase or is it to give distinction to contributors across partners? The thought I had for If centralized it's easy to work with from an SDK point of view (only official installs can update, everyone can read sort of thing) and we modify your type slightly: type XP = {
[userId: string]: {
totalReward: Reward;
tasks: {
[orgId: string]: {
[issueId: string]: {
xpModifier: XPModifier;
reward: Reward;
}
}
}
}
}; Modifiers in a JSON File
Could you clarify your suggestion? Are you proposing that a partner should manually update What events trigger this plugin? The XP Modification MechanicsIt's not entirely clear to me how the XP system would modify experience points on a per-task basis based purely on reward amounts, other than checking if an issue was reopened. Here are my questions and thoughts:
If the XP calculations are solely based on reward amounts, then plugin configuration options like Potential Causes for Negative ModifiersThese should be programmatically verifiable.
Other Possible Modifiers Unrelated to Rewards Earned
|
We can worry about making it global later. I think local implementation is straightforward and is our only need for the near future. If we can write to the plugin's repo then global implementation should be viable in another task. XP AppsPulls
Starting New Tasks
Chrome Extension
RemarksThe most useful application in the near future is the pull disqualification. Its simple and will save our reviewers a ton of headache from new contributors who are not skilled. If it is too tedious to review an assignee's work (i.e. they submit work without testing, and of course it doesn't function as expected...) then us reviewers can keep requesting changes until they are disqualified. Because the bot kicks their assignment and closes their pull, the assignee is unlikely to retaliate towards the reviewers, making operations streamlined and simple. |
@Keyrxng what do you think about making it for XP system? Given the steep cost of 2701, thats equivalent to a six week long, urgent project (2800 USD.) Massive spec will be necessary. I assume we would essentially need to write six specs, for every one week sprint.
I wonder if its appropriate to make a parent task with six child tasks? |
It's beneficial to consolidate each section into one place for centralized questions and assistance, rather than having a single task overwhelmed by numerous inquiries spanning all steps. None of the tasks should be labeled for permit generation, but we could visualize the reward by assigning a value to each task on the parent issue. These steps sound ideal. The parent issue would provide an overview and the 'rules' for submissions, with each child containing a detailed specification. For tracking, contributors should tag the completed task when pushing a commit. This would simplify progress tracking for reviewers and is more efficient than commenting on the PR or issue. If reviewing submissions as they come, this might be more equitable and lead to higher quality final submissions but doesn't seem as "fair" and it's atypical of hackathons. Regarding the submission process, one PR on submission day might be easier than managing six different PRs for each child task per contributor. What are your thoughts? Should we define some metrics for submissions?
|
V1 basic prototype:
V2 could include reviewer XP etc but V1 should focus on just the assignee. |
Stress testing: With input from @EresDev on this one maybe in regards to using something like https://k6.io/? Cache system: I'm a little confused by this actually. So Maybe if we also store the last activity on the issue it will make re-processing issues quicker? [issueId: string]: {
xpModifier: XPModifier;
reward: Reward;
lastActivity: Date;
} |
Somebody on the team made a good point about "coupling" or not making plugins rely too much on each other. So I have mixed feelings with the approach on XP calculation. Ideal situation: we standardize a comment metadata interface for "scoring" or "rewards" output from every plugin. Then, the permit generation plugin can run at the end of every chain1. It will parse the scoring metadata posted by every plugin, sum it up, and generate a payment permit2. Now, the coupling is minimized and we are able to sum the rewards and save the XP. @gentlementlegen @whilefoo rfc ImplementationIdeally our kernel or permit generation plugin will handle compiling a coherent JSON object to append at the end of the comment. The goal would be to make this foolproof for plugin developers. Perhaps we have a method in our SDK where they pass a specific object shape that represents the rewards totals from their plugin? Unclear if we can parse outputs directly from plugins or if we have to write the output to the comment, and then parse the comment and recompile the JSON. Either should be fine but the comment approach could be interesting to see the results stream in as the manager continues evaluations and editing the comment. ExampleExample generalized rewards metadata format: type Rewards = {
source: string;
results: {
user: number;
reward: number;
}[];
};
const rewards: Rewards[] = [
{
source: "@ubiquity-os/conversation-rewards",
results: [
{
user: 0,
reward: 100,
},
{
user: 1,
reward: 100,
},
],
},
]; Footnotes |
So a typical scenario would be:
Right now We can't append it to the task/PR body or the contributor can edit it. So we'd need to have a dedicated comment (maybe an immediate placeholder is commented by the bot to save the highest safe comment for it) We would also have to create safeguards for it so that only authorized org members can actually edit the metadata comment too otherwise any member could mess with it so a plugin running on |
We can probably check who last edited and crash if it's anybody but the bot. It could also be very interesting to render a minimal chart that represents the status of every plugin in the chain |
Since we're moving to generating the permit on
the kernel can retrieve plugin outputs directly, there's no need to write output to a comment. |
I heavily dislike the database dependency. It centralizes things and makes development more burdensome to set up. We should decentralize the data. Consider storing the data on GitHub |
The problem with that approach is that the results are totally specific for reward calculation, which is only relevant for a few plugins. I think we can standardize results but they should be very generic and just enforce some |
type DeveloperFriendlyRewards = {
rewards: {
"@ubiquity-os/conversation-rewards": {
"0x4007": 50
}
}
} type AnalyticsFriendlyRewards = {
rewards: {
"759346183": {
"4975670": 50
}
}
} I feel like the least developer friendly to debug, but most friendly for analytics, is to use repository and user IDs, since those never change. Otherwise we can consider using the repository name and user name. If it is hosted off of GitHub though, the plugin will need to use the URL as its ID. |
Storing JSON on Github has a number of problems which is exactly why databases were created. If two events both want a reward to the user at the same time, one will fail. Schema changes are really pain in the ass. Also imagine thousands of users with hunders of rewards which will create a big JSON (github max file size is 50MB) |
Easy to solve. Can break apart JSONs per plugin, and per partner org, and per partner repo if necessary. But if we store in each partner's i.e. |
That would partially solve the problem but it creates a problem where a plugin wants to query globally. For example if rewards are stored in partners repo, 'pay.ubq.fi' needs to fetch all repos and calculate how much the user can claim, generate a permit and then where will it store the permit, our global repo for permits? Then you have the original problem |
We could do per org by passing in a query param. These are all not complicated problems to solve. |
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
Why don't we create a dedicated plugin which handles the github storage layer? it can respond to custom events like how the kernel has To improve concurrency and response times when interacting with GitHub as a storage layer:
Cloudflare provides everything we'd need for it (idk about the costs involved though) Cache, Durable Objects, KV etc. We make it a plugin so that it has direct access to our kernel which I'd expect it to need. So only we'd need to install it into the official bot, not partners. It could respond to a custom event schema that we create and we dispatch from SDK to the repo with the data to store. Or we could just hit the worker endpoint directly from the SDK. Cache, Queue etc introduce their own problems I'm aware but I'd think it would be an improvement over hundreds of instances all hitting the Github API directly? This plugin would be substantial to implement fully and would be a good contender for the replit bounty itself imo |
I think worry about those scaling problems later. We have like less than 100 events per day per org of ours. It's fine. |
This comment was marked as off-topic.
This comment was marked as off-topic.
@githubbin765 just take it one task at a time buddy, start small and learn the projects. Do not over commit or spread yourself too thin. Pick one and complete it and then move on to the next. There are no secret developer tests, the tests are the tasks but if you experienced problems while using any part of the eco-system please open an issue in the relevant repo and include a description and image of the error so that we can price it to be resolved, thanks. Pop into the telegram if you have any more questions as these comments are not pertinent to the task at hand, cheers. |
Hi! you can create bounties on Opire. It integrates with GitHub, but if you don't want to install the bot, you can always create bounties from the dashboard. Also, you don't pay out until someone claims the bounty with a PR. PS: I'm the co-founder, so if you need anything, feel free to contact me. |
@Keyrxng I will attempt joining TG sometime soon. |
We are going to create another 3rd party bounty posting but this will be different from all others we have/intend to post for the reasons below.
/start
or self-assign as the bot might complain.How this task is atypical?
This task will be a "free-for-all" and all contributors will work on completing it, with the best submission chosen as the winner.
Suggested task:
Design a new Ubiquibot plugin, specifically a new slash command
/remindMe
.Or we could open it up to just design any sort of new plugin, whatever you can think of?
Idk if we should post and set a start date for a few days/weeks from now and then release all of the info on the same day to make it fairer. This assumes that any attention we catch is sufficient enough for them to set a reminder or make a point of taking part, do we have enough dev incentive/momentum for that to have more success than just releasing everything immediately and setting a deadline for submission?
It's very hard to estimate how much traffic and actual PRs that'll have to be reviewed when the time comes. I assume that most responsibilities will fall onto the assignee but if it's a crazy amount of PRs idk how we'd handle that lmao, assign specific team members or every one pitch in whatever but help if flooded would be awesome 😂
Finally, whether we use my suggestion or some other task, what should the bounty reward actually be? Considering that it's not priced like a typical task, we want to draw as many folks to it as possible. $1,000 same as our DoraHacks bounty?
The highest priced open bounty on Replit right now is $2,700.
The text was updated successfully, but these errors were encountered: