Skip to content

Formalize the process for deprecating exercises #40

Closed
@kytrinyx

Description

@kytrinyx

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions