Closed
Description
Sometimes we need to deprecate exercises. For example:
- we decide that the exercise is not interesting enough.
- we want to rename the exercise (deprecating the old name).
- we realize that there are two exercises that are too similar, and want to deprecate one of them.
Probably other good reasons, too.
Anyway, doing this is a bit tricky, because:
- several language tracks typically implement any given exercise. We want to be able to deprecate things without creating dependencies between tracks, or making it tricky to deploy (or easy to break).
- if people have submitted a solution then this affects what they are able to see. If we are renaming an exercise, they should see all the solutions that come in with the new name. Also, people who are solving the new version of the exercise should see solutions that were solved against the old version. We have previously written migrations to rename the old solutions to the new ones, and update the access control lists (
acls
table in the database).
Note that when we deprecate an exercise, it means that we don't automatically deliver it when someone says exercism fetch $TRACK_ID
. However, people can always fetch it explicitly by saying exercism fetch $TRACK_ID $PROBLEM_SLUG
. If they submit it, then it will go to the site. That said, nobody will see it, unless we migrate it.
We should probably come up with a reproducible step-by-step process for deprecating problems and document it.