[racket] the current package submission system is a mess

From: Ryan Davis (zenspider at gmail.com)
Date: Wed Nov 12 18:47:05 EST 2014

> On Nov 5, 2014, at 17:53, Jay McCarthy <jay.mccarthy at gmail.com> wrote:
> Hi Ryan,
> On Wed, Nov 5, 2014 at 7:14 PM, Ryan Davis <zenspider at gmail.com> wrote:
>> The package submission system is hostile and incredibly frustrating to use.
>> I've tried a bazillion times now to submit a package (check-sexp-equal) and ensure that:
>> 1) the source points to a git repo properly: it keeps going to an https url and then fails on install because it doesn't have a MANIFEST file. Subsequent changes to git: protocol urls get reverted silently.
> When you use an HTTP(S) URL that points to a directory, [...] You probably meant to name a Github repository, with the syntax... git://github.com/‹user›/‹repo›

Yes, and as I described, I couldn't for the life of me change _anything_, so all this explanation isn't really helpful to someone who's frustrated and just wants to submit a package for the first time.

The problem is that this site doesn't communicate _at_all_ with the user. It uses (I assume) ajax to do all of its work with the server and does NOTHING to talk to me about where things are and whether they're working. It does't say when there is an error on the server side. It doesn't say when things time out. It doesn't say when it is successful with an edit. It doesn't even say that it is trying to do an edit.

I would MUCH rather have a stupid forms-base GET/POST submission, have to fill out all the info, and get a confirmation back when it works or a 500 back that says something went wrong rather than something that silently sits there and may or may not have worked but never tells me.

If you insist on using ajax for per-field submission, then it should at least have:

1) a server status box saying it is healthy or dead or how many things are queued up before it'll get to my stuff.
2) a per field status indicator on changes. Something like a spinner while waiting and a checkbox when it successfully updates and a message on the field when there is an error.

> If you look at an example package, such as samth's abnf [2], you'll
> see that his source is: "git://github.com/samth/abnf". For
> convenience, the Web site makes this package source and Web link to
> the Github WWW interface, "http://github.com/samth/abnf/tree/master".
> But that link is not the source. The source is thing displayed next to
> "Source:".
> It is possible that we could make something like, "I see you are using
> HTTPS for a Github package, are you sure that's what you want?"
> Similarly, it is not intuitive that the "Copy link address" isn't a
> good thing to copy for the source, although I'm afraid I'm at a loss
> for where else would be a better place to put the link to the source
> code. Do you have any ideas?
> 1. http://docs.racket-lang.org/pkg/Package_Concepts.html#%28part._concept~3asource%29
> 2. http://pkgs.racket-lang.org/#[abnf]

A link on the form to that page would be a good start.

A simple list of protocol templates would save some time once the user is familiar with the process.

Right now I have to google around to try to find the right doco that describes it.

I was actually using abnf as my template once I realized things were messed up but by then it was too late.

> I assume that the behavior you're seeing of "changes ... get reverted
> silently" is because of what I comment on in the next item.
>> 2) it is tagged properly: the tags deleted themselves and now I can't edit the tags.
> When you input a new tag, the Web page you are seeing reflects your
> changes, but those changes are not necessarily updated through-out the
> world or when you hit refresh. When you refresh (and in the original
> window) it says (at the top in yellow), "update upload being computed:
> the information below may not represent all recent changes and
> updates".

Not once did I see such a yellow box.

> I need to improve the UI when the update computation fails. I assume
> that something happened on the server that lost the update and lost
> the changes you made.
>> 3) it is deleted. If nobody can install it, maybe I should delete it and start over? Can't.
> You don't need to delete it, you can just change the source. Of
> course, the reason deletion didn't work is because updates were broken
> on the server side.

Except I couldn't and nothing said that updates were broken on the server side.

>> Now when I reload the page it just says "Logging in..." at the top. Is this why my edits aren't going through?
> Yes, that means the server is busted and needs to be kicked, which I
> have done. I presume it died in the middle of your updates, which is
> why they were lost.

I had to delete my cookies before I could get a form and try again. A cancel button would make that easier for the user. A timeout would too.

>> There's no way to log out, it seems. I guess I can forcibly delete any cookies for the domain, but is this really the way?
> If you are logged in, there is a log out button. If you are not logged
> in (such as being in the middle of "Logging in...") then you can't log
> out, because you aren't in.

Your description is of a 2 node state machine when it is currently implemented as 3. I can't log out because I'm not in, but if I'm not in, then I should be able to log in, yet I can't because there is no form. Instead, it is stuck in state-3: spinning on auth.

> I'm sorry that it was painful. I'm very interested in trying to
> improve and increase the reliability of the server. I'm happy to work
> with you on it. I'm "jeapostrophe" on the IRC channel and I'm happy to
> PM you my cell if that would be a more convenient way to work through
> it.

Apparently I'm already talking to you on IRC :P

Posted on the users mailing list.