We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Reading goal status doesn't set plurals correctly
When someone is only planning to read 1 book, the status should say "1 book" not "1 books"

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `bookwyrm/views/goal.py`
Content:
```
1 ''' non-interactive pages '''
2 from django.contrib.auth.decorators import login_required
3 from django.http import HttpResponseNotFound
4 from django.shortcuts import redirect
5 from django.template.response import TemplateResponse
6 from django.utils.decorators import method_decorator
7 from django.views import View
8 
9 from bookwyrm import forms, models
10 from bookwyrm.status import create_generated_note
11 from .helpers import get_user_from_username, object_visible_to_user
12 
13 
14 # pylint: disable= no-self-use
15 @method_decorator(login_required, name='dispatch')
16 class Goal(View):
17     ''' track books for the year '''
18     def get(self, request, username, year):
19         ''' reading goal page '''
20         user = get_user_from_username(username)
21         year = int(year)
22         goal = models.AnnualGoal.objects.filter(
23             year=year, user=user
24         ).first()
25         if not goal and user != request.user:
26             return HttpResponseNotFound()
27 
28         if goal and not object_visible_to_user(request.user, goal):
29             return HttpResponseNotFound()
30 
31         data = {
32             'title': '%s\'s %d Reading' % (user.display_name, year),
33             'goal_form': forms.GoalForm(instance=goal),
34             'goal': goal,
35             'user': user,
36             'year': year,
37             'is_self': request.user == user,
38         }
39         return TemplateResponse(request, 'goal.html', data)
40 
41 
42     def post(self, request, username, year):
43         ''' update or create an annual goal '''
44         user = get_user_from_username(username)
45         if user != request.user:
46             return HttpResponseNotFound()
47 
48         year = int(year)
49         goal = models.AnnualGoal.objects.filter(
50             year=year, user=request.user
51         ).first()
52         form = forms.GoalForm(request.POST, instance=goal)
53         if not form.is_valid():
54             data = {
55                 'title': '%s\'s %d Reading' % (request.user.display_name, year),
56                 'goal_form': form,
57                 'goal': goal,
58                 'year': year,
59             }
60             return TemplateResponse(request, 'goal.html', data)
61         goal = form.save()
62 
63         if request.POST.get('post-status'):
64             # create status, if appropraite
65             create_generated_note(
66                 request.user,
67                 'set a goal to read %d books in %d' % (goal.goal, goal.year),
68                 privacy=goal.privacy
69             )
70 
71         return redirect(request.headers.get('Referer', '/'))
72
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/bookwyrm/views/goal.py b/bookwyrm/views/goal.py
--- a/bookwyrm/views/goal.py
+++ b/bookwyrm/views/goal.py
@@ -2,6 +2,7 @@
 from django.contrib.auth.decorators import login_required
 from django.http import HttpResponseNotFound
 from django.shortcuts import redirect
+from django.template.loader import get_template
 from django.template.response import TemplateResponse
 from django.utils.decorators import method_decorator
 from django.views import View
@@ -62,9 +63,10 @@
 
         if request.POST.get('post-status'):
             # create status, if appropraite
+            template = get_template('snippets/generated_status/goal.html')
             create_generated_note(
                 request.user,
-                'set a goal to read %d books in %d' % (goal.goal, goal.year),
+                template.render({'goal': goal, 'user': request.user}).strip(),
                 privacy=goal.privacy
             )

{"golden_diff": "diff --git a/bookwyrm/views/goal.py b/bookwyrm/views/goal.py\n--- a/bookwyrm/views/goal.py\n+++ b/bookwyrm/views/goal.py\n@@ -2,6 +2,7 @@\n from django.contrib.auth.decorators import login_required\n from django.http import HttpResponseNotFound\n from django.shortcuts import redirect\n+from django.template.loader import get_template\n from django.template.response import TemplateResponse\n from django.utils.decorators import method_decorator\n from django.views import View\n@@ -62,9 +63,10 @@\n \n         if request.POST.get('post-status'):\n             # create status, if appropraite\n+            template = get_template('snippets/generated_status/goal.html')\n             create_generated_note(\n                 request.user,\n-                'set a goal to read %d books in %d' % (goal.goal, goal.year),\n+                template.render({'goal': goal, 'user': request.user}).strip(),\n                 privacy=goal.privacy\n             )\n", "issue": "Reading goal status doesn't set plurals correctly\nWhen someone is only planning to read 1 book, the status should say \"1 book\" not \"1 books\"\n", "before_files": [{"content": "''' non-interactive pages '''\nfrom django.contrib.auth.decorators import login_required\nfrom django.http import HttpResponseNotFound\nfrom django.shortcuts import redirect\nfrom django.template.response import TemplateResponse\nfrom django.utils.decorators import method_decorator\nfrom django.views import View\n\nfrom bookwyrm import forms, models\nfrom bookwyrm.status import create_generated_note\nfrom .helpers import get_user_from_username, object_visible_to_user\n\n\n# pylint: disable= no-self-use\n@method_decorator(login_required, name='dispatch')\nclass Goal(View):\n    ''' track books for the year '''\n    def get(self, request, username, year):\n        ''' reading goal page '''\n        user = get_user_from_username(username)\n        year = int(year)\n        goal = models.AnnualGoal.objects.filter(\n            year=year, user=user\n        ).first()\n        if not goal and user != request.user:\n            return HttpResponseNotFound()\n\n        if goal and not object_visible_to_user(request.user, goal):\n            return HttpResponseNotFound()\n\n        data = {\n            'title': '%s\\'s %d Reading' % (user.display_name, year),\n            'goal_form': forms.GoalForm(instance=goal),\n            'goal': goal,\n            'user': user,\n            'year': year,\n            'is_self': request.user == user,\n        }\n        return TemplateResponse(request, 'goal.html', data)\n\n\n    def post(self, request, username, year):\n        ''' update or create an annual goal '''\n        user = get_user_from_username(username)\n        if user != request.user:\n            return HttpResponseNotFound()\n\n        year = int(year)\n        goal = models.AnnualGoal.objects.filter(\n            year=year, user=request.user\n        ).first()\n        form = forms.GoalForm(request.POST, instance=goal)\n        if not form.is_valid():\n            data = {\n                'title': '%s\\'s %d Reading' % (request.user.display_name, year),\n                'goal_form': form,\n                'goal': goal,\n                'year': year,\n            }\n            return TemplateResponse(request, 'goal.html', data)\n        goal = form.save()\n\n        if request.POST.get('post-status'):\n            # create status, if appropraite\n            create_generated_note(\n                request.user,\n                'set a goal to read %d books in %d' % (goal.goal, goal.year),\n                privacy=goal.privacy\n            )\n\n        return redirect(request.headers.get('Referer', '/'))\n", "path": "bookwyrm/views/goal.py"}], "after_files": [{"content": "''' non-interactive pages '''\nfrom django.contrib.auth.decorators import login_required\nfrom django.http import HttpResponseNotFound\nfrom django.shortcuts import redirect\nfrom django.template.loader import get_template\nfrom django.template.response import TemplateResponse\nfrom django.utils.decorators import method_decorator\nfrom django.views import View\n\nfrom bookwyrm import forms, models\nfrom bookwyrm.status import create_generated_note\nfrom .helpers import get_user_from_username, object_visible_to_user\n\n\n# pylint: disable= no-self-use\n@method_decorator(login_required, name='dispatch')\nclass Goal(View):\n    ''' track books for the year '''\n    def get(self, request, username, year):\n        ''' reading goal page '''\n        user = get_user_from_username(username)\n        year = int(year)\n        goal = models.AnnualGoal.objects.filter(\n            year=year, user=user\n        ).first()\n        if not goal and user != request.user:\n            return HttpResponseNotFound()\n\n        if goal and not object_visible_to_user(request.user, goal):\n            return HttpResponseNotFound()\n\n        data = {\n            'title': '%s\\'s %d Reading' % (user.display_name, year),\n            'goal_form': forms.GoalForm(instance=goal),\n            'goal': goal,\n            'user': user,\n            'year': year,\n            'is_self': request.user == user,\n        }\n        return TemplateResponse(request, 'goal.html', data)\n\n\n    def post(self, request, username, year):\n        ''' update or create an annual goal '''\n        user = get_user_from_username(username)\n        if user != request.user:\n            return HttpResponseNotFound()\n\n        year = int(year)\n        goal = models.AnnualGoal.objects.filter(\n            year=year, user=request.user\n        ).first()\n        form = forms.GoalForm(request.POST, instance=goal)\n        if not form.is_valid():\n            data = {\n                'title': '%s\\'s %d Reading' % (request.user.display_name, year),\n                'goal_form': form,\n                'goal': goal,\n                'year': year,\n            }\n            return TemplateResponse(request, 'goal.html', data)\n        goal = form.save()\n\n        if request.POST.get('post-status'):\n            # create status, if appropraite\n            template = get_template('snippets/generated_status/goal.html')\n            create_generated_note(\n                request.user,\n                template.render({'goal': goal, 'user': request.user}).strip(),\n                privacy=goal.privacy\n            )\n\n        return redirect(request.headers.get('Referer', '/'))\n", "path": "bookwyrm/views/goal.py"}]}