Documentation on retries when throwing errors is not clear

so i went through the documentation it says here - Class: ApplicationFailure | Temporal TypeScript SDK API Reference

In Workflows, if you throw a non-ApplicationFailure, the Workflow Task will fail and be retried. If you throw an ApplicationFailure, the Workflow Execution will fail.

  1. first of all - how is one wf task being retried or failing and not the entire workflow from start ? i didnt know we can retry a piece of wf defintion (i.e. wf task) and not the enture workflow ? even for entire workflow retry we need to provide retry policy during wfClient.start() or wfClient.execute right ? What exactly is being talked about here in terms of retry - can someone explain with an example.

  2. also - why throwing non-ApplicationFailure, - will retry the wf task but ApplicationFailure will not ?
    I feel like I am missing something here.

then further in this documention - Temporal Failures reference | Temporal Documentation

It says -

Only Workflow errors that are Temporal Failures cause the Workflow Execution to fail; all other errors cause the Workflow Task to fail and be retried

  1. this statement is confusing because all errors like ApplicationFailures, ActivityFailures etc - are - basically TemporalFailures since its the main base-class - so any of those thrown from workflow will cause it to fail and not retry ? what does this mean exactly and why its been built this way ? and it sounds wrong because ApplicationFailure can indeed cause retries right ?

  2. non TemporalFailure type errors - will make wf task be retried - why this has been built this way - why throw new Error(“non TemporalFailure”) - should make wf task be retried but new TemporalFailure() should not ?

I really need to understand the distinctions here