{"action":"created","issue":{"url":"https://api.github.com/repos/gratipay/algorithm.py/issues/5","labels_url":"https://api.github.com/repos/gratipay/algorithm.py/issues/5/labels{/name}","comments_url":"https://api.github.com/repos/gratipay/algorithm.py/issues/5/comments","events_url":"https://api.github.com/repos/gratipay/algorithm.py/issues/5/events","html_url":"https://github.com/gratipay/algorithm.py/issues/5","id":59234272,"number":5,"title":"Provide a safe way to patch an algorithm","user":{"login":"Changaco","id":1581590,"avatar_url":"https://avatars.githubusercontent.com/u/1581590?v=3","gravatar_id":"","url":"https://api.github.com/users/Changaco","html_url":"https://github.com/Changaco","followers_url":"https://api.github.com/users/Changaco/followers","following_url":"https://api.github.com/users/Changaco/following{/other_user}","gists_url":"https://api.github.com/users/Changaco/gists{/gist_id}","starred_url":"https://api.github.com/users/Changaco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Changaco/subscriptions","organizations_url":"https://api.github.com/users/Changaco/orgs","repos_url":"https://api.github.com/users/Changaco/repos","events_url":"https://api.github.com/users/Changaco/events{/privacy}","received_events_url":"https://api.github.com/users/Changaco/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":2,"created_at":"2015-02-27T13:11:22Z","updated_at":"2015-02-27T15:25:34Z","closed_at":null,"body":"In Gratipay we patch Aspen's website algorithm [by setting `algorithm.functions`](https://github.com/gratipay/gratipay.com/blob/1792/gratipay/main.py#L84-124). This method implicitly skips functions, so [when a function is added to the algorithm upstream](https://github.com/gratipay/aspen-python/issues/422) and we don't notice the change or forget to propagate it, then we can end up with silent errors like https://github.com/gratipay/gratipay.com/issues/3210.\r\n\r\nA method of modifying the algorithm based on **explicit** skipping would fix the silent error problem."},"comment":{"url":"https://api.github.com/repos/gratipay/algorithm.py/issues/comments/76411414","html_url":"https://github.com/gratipay/algorithm.py/issues/5#issuecomment-76411414","issue_url":"https://api.github.com/repos/gratipay/algorithm.py/issues/5","id":76411414,"user":{"login":"whit537","id":134455,"avatar_url":"https://avatars.githubusercontent.com/u/134455?v=3","gravatar_id":"","url":"https://api.github.com/users/whit537","html_url":"https://github.com/whit537","followers_url":"https://api.github.com/users/whit537/followers","following_url":"https://api.github.com/users/whit537/following{/other_user}","gists_url":"https://api.github.com/users/whit537/gists{/gist_id}","starred_url":"https://api.github.com/users/whit537/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/whit537/subscriptions","organizations_url":"https://api.github.com/users/whit537/orgs","repos_url":"https://api.github.com/users/whit537/repos","events_url":"https://api.github.com/users/whit537/events{/privacy}","received_events_url":"https://api.github.com/users/whit537/received_events","type":"User","site_admin":false},"created_at":"2015-02-27T15:25:34Z","updated_at":"2015-02-27T15:25:34Z","body":"If we use `insert_{before,after}` and `remove` then we lose the clarity of having all of the functions in a single list. It would be harder to visualize what exactly an algorithm is doing."}}