diff --git a/docs/changes/unreleased/1886-tasks-at-once-manual-category.md b/docs/changes/unreleased/1886-tasks-at-once-manual-category.md new file mode 100644 index 0000000000..2ef329c0d5 --- /dev/null +++ b/docs/changes/unreleased/1886-tasks-at-once-manual-category.md @@ -0,0 +1,8 @@ +--- +kind: fixed +title: the tasks manual points task.parallel at Tasks, not Spending +pr: 1886 +surface: [docs] +invalidates: + - "The tasks manual located `task.parallel` under the settings panel's category \"spending\", so someone following the page searched the wrong section. `/settings` draws the row under Tasks as `tasks at once` (`CategoryTasks` in the registry); the page now names the section and the row exactly as drawn, and manual probes for the setting reach the tasks page." +--- diff --git a/internal/manual/chat/tasks.md b/internal/manual/chat/tasks.md index 565bce0143..262e0e5d70 100644 --- a/internal/manual/chat/tasks.md +++ b/internal/manual/chat/tasks.md @@ -4275,13 +4275,13 @@ The plan store allows up to 256 tasks in one added batch and 1024 tasks in one r A composite worker can wake at most four times to integrate its children. The node tree's 3/20 bounds do not apply to that run. -## How many tasks run at once — can I have it do two things at the same time, can you work on several parts of my answer at once +## How many tasks run at once, where is task.parallel, where is the tasks at once setting, can I have it do two things at the same time, can you work on several parts of my answer at once **There is no limit by default.** codeaf does not cap the number of tasks running at the same time. The setting `task.parallel` exists for anyone who wants a number anyway — settings panel -(`ctrl+,` or `/settings`), category "spending". Blank means no limit. A cap is a queue and +(`ctrl+,` or `/settings`), under Tasks as `tasks at once`. Blank means no limit. A cap is a queue and never a refusal: work past the cap waits and starts when a slot frees, and while it waits its roster row says `waiting · slot` on its hint line, and it sits under `Queued`, which starts folded to its heading. diff --git a/internal/manual/chat_test.go b/internal/manual/chat_test.go index c23d1a3973..964de20431 100644 --- a/internal/manual/chat_test.go +++ b/internal/manual/chat_test.go @@ -932,6 +932,8 @@ func TestTheChatManualAnswersTheQuestionsPeopleAsk(t *testing.T) { {"my cursor jumped to another task while I was reading", "tasks"}, {"why is the finished piece at the bottom of the family", "tasks"}, {"can codeaf parallelize my task", "tasks"}, + {"where is the tasks at once setting", "tasks"}, + {"what section is task.parallel under", "tasks"}, {"how do I open my tasks on a phone", "tasks"}, {"how do I get back from a task on my phone", "tasks"}, {"do tasks touch my working copy", "how-tasks-run"}, @@ -3523,6 +3525,29 @@ func TestTheChatManualAnswersTheQuestionsPeopleAsk(t *testing.T) { } } +// #1454: task.parallel is on the Tasks tab as `tasks at once`, not under +// Spending. This checks the retrieved section's answer rather than only its +// page, so restoring the former category cannot leave the retrieval gate green. +func TestTaskParallelQuestionReachesItsCorrectedSettingsLocation(t *testing.T) { + const ( + question = "where is task.parallel" + title = "How many tasks run at once" + ) + for _, section := range Chat().Search(question, DefaultResults) { + if section.Page != "tasks" || !strings.Contains(section.Title, title) { + continue + } + if !strings.Contains(section.Body, "under Tasks as `tasks at once`") { + t.Errorf("task.parallel answer omits its visible settings location: %s", section.Body) + } + if strings.Contains(section.Body, `category "spending"`) { + t.Errorf("task.parallel answer still names the former category: %s", section.Body) + } + return + } + t.Fatalf("%q did not reach tasks · %q", question, title) +} + // #1469: home listed waiting standing orders without their due time, and a person // asking when one goes off there had to be sent to the standing place for it. // Standing orders are automations now (automations.md), and home's `automations`