From add86331068708b48843affa221988a694ebb2ac Mon Sep 17 00:00:00 2001 From: Pratyush Sharma <56130065+pratyush618@users.noreply.github.com> Date: Wed, 6 May 2026 01:01:53 +0530 Subject: [PATCH] docs: drop /docs prefix from doc URLs Move the docs route into a `(docs)` route group with a required catch-all so docs render at site root (e.g. /architecture/resources) instead of /docs/architecture/resources. Drop the redundant docs index page since the marketing home already serves that role. --- docs/content/docs/api-reference/canvas.mdx | 6 +-- docs/content/docs/api-reference/cli.mdx | 2 +- docs/content/docs/api-reference/context.mdx | 6 +-- docs/content/docs/api-reference/index.mdx | 18 +++---- docs/content/docs/api-reference/overview.mdx | 16 +++--- .../docs/api-reference/queue/index.mdx | 20 +++---- .../docs/api-reference/queue/resources.mdx | 2 +- docs/content/docs/api-reference/result.mdx | 16 +++--- docs/content/docs/api-reference/task.mdx | 10 ++-- .../docs/architecture/failure-model.mdx | 4 +- docs/content/docs/architecture/index.mdx | 16 +++--- docs/content/docs/architecture/overview.mdx | 14 ++--- docs/content/docs/architecture/storage.mdx | 2 +- .../content/docs/getting-started/concepts.mdx | 4 +- .../docs/getting-started/installation.mdx | 2 +- .../docs/getting-started/quickstart.mdx | 12 ++--- .../advanced-execution/batch-enqueue.mdx | 2 +- .../docs/guides/advanced-execution/index.mdx | 12 ++--- .../docs/guides/core/execution-model.mdx | 4 +- docs/content/docs/guides/core/index.mdx | 12 ++--- docs/content/docs/guides/core/tasks.mdx | 2 +- docs/content/docs/guides/core/workers.mdx | 2 +- docs/content/docs/guides/core/workflows.mdx | 6 +-- .../docs/guides/extensibility/index.mdx | 6 +-- .../docs/guides/extensibility/middleware.mdx | 2 +- docs/content/docs/guides/index.mdx | 18 +++---- .../docs/guides/integrations/index.mdx | 12 ++--- .../content/docs/guides/integrations/otel.mdx | 2 +- .../docs/guides/integrations/prometheus.mdx | 2 +- .../docs/guides/integrations/sentry.mdx | 2 +- .../docs/guides/observability/dashboard.mdx | 2 +- .../docs/guides/observability/index.mdx | 8 +-- .../docs/guides/observability/monitoring.mdx | 6 +-- .../docs/guides/operations/deployment.mdx | 8 +-- docs/content/docs/guides/operations/index.mdx | 14 ++--- docs/content/docs/guides/operations/keda.mdx | 4 +- .../docs/guides/operations/testing.mdx | 4 +- .../guides/reliability/error-handling.mdx | 4 +- .../docs/guides/reliability/guarantees.mdx | 2 +- .../content/docs/guides/reliability/index.mdx | 12 ++--- .../guides/resources/dependency-injection.mdx | 4 +- docs/content/docs/guides/resources/index.mdx | 12 ++--- .../docs/guides/resources/interception.mdx | 4 +- .../docs/guides/resources/observability.mdx | 4 +- .../content/docs/guides/resources/proxies.mdx | 2 +- .../docs/guides/workflows/building.mdx | 2 +- .../content/docs/guides/workflows/fan-out.mdx | 2 +- docs/content/docs/guides/workflows/index.mdx | 16 +++--- docs/content/docs/index.mdx | 53 ------------------- docs/content/docs/meta.json | 1 - docs/content/docs/more/comparison.mdx | 2 +- docs/content/docs/more/examples/index.mdx | 12 ++--- docs/content/docs/more/faq.mdx | 12 ++--- .../[[...slug]] => (docs)/[...slug]}/page.tsx | 4 +- docs/src/app/{docs => (docs)}/layout.tsx | 2 +- .../llms.mdx/{docs => }/[[...slug]]/route.ts | 2 +- .../src/app/og/{docs => }/[...slug]/route.tsx | 2 +- docs/src/lib/landing-content.tsx | 24 ++++----- docs/src/lib/layout.shared.tsx | 10 ++-- docs/src/lib/shared.ts | 6 +-- 60 files changed, 210 insertions(+), 264 deletions(-) delete mode 100644 docs/content/docs/index.mdx rename docs/src/app/{docs/[[...slug]] => (docs)/[...slug]}/page.tsx (94%) rename docs/src/app/{docs => (docs)}/layout.tsx (79%) rename docs/src/app/llms.mdx/{docs => }/[[...slug]]/route.ts (91%) rename docs/src/app/og/{docs => }/[...slug]/route.tsx (94%) diff --git a/docs/content/docs/api-reference/canvas.mdx b/docs/content/docs/api-reference/canvas.mdx index 3e984d1..b5e91f9 100644 --- a/docs/content/docs/api-reference/canvas.mdx +++ b/docs/content/docs/api-reference/canvas.mdx @@ -94,7 +94,7 @@ chain.apply(queue: Queue | None = None) -> JobResult ``` Execute the chain by enqueuing and waiting for each step sequentially. Returns -the [`JobResult`](/docs/api-reference/result) of the **last** step. +the [`JobResult`](/api-reference/result) of the **last** step. Each step's return value is prepended to the next mutable signature's args. Immutable signatures (`task.si()`) receive their args as-is. @@ -154,7 +154,7 @@ group.apply(queue: Queue | None = None) -> list[JobResult] ``` Enqueue all signatures and return a list of -[`JobResult`](/docs/api-reference/result) handles. Jobs run concurrently +[`JobResult`](/api-reference/result) handles. Jobs run concurrently across available workers. ```python @@ -209,7 +209,7 @@ chord.apply(queue: Queue | None = None) -> JobResult Execute the group, wait for all results, then run the callback with the list of results prepended to its args (unless immutable). Returns the -[`JobResult`](/docs/api-reference/result) of the callback. +[`JobResult`](/api-reference/result) of the callback. ```python @queue.task() diff --git a/docs/content/docs/api-reference/cli.mdx b/docs/content/docs/api-reference/cli.mdx index bd68f64..65284f9 100644 --- a/docs/content/docs/api-reference/cli.mdx +++ b/docs/content/docs/api-reference/cli.mdx @@ -162,7 +162,7 @@ The server exposes three routes: taskito scaler --app myapp:queue --port 9091 --target-queue-depth 5 ``` -See the [KEDA Integration guide](/docs/guides/operations) for Kubernetes deploy +See the [KEDA Integration guide](/guides/operations) for Kubernetes deploy templates. ## Error messages diff --git a/docs/content/docs/api-reference/context.mdx b/docs/content/docs/api-reference/context.mdx index a35f386..c4373bc 100644 --- a/docs/content/docs/api-reference/context.mdx +++ b/docs/content/docs/api-reference/context.mdx @@ -86,8 +86,8 @@ current_job.update_progress(progress: int) -> None ``` Update the job's progress percentage (0–100). The value is written directly to -the database and can be read via [`job.progress`](/docs/api-reference/result) -or [`queue.get_job()`](/docs/api-reference/queue/jobs). +the database and can be read via [`job.progress`](/api-reference/result) +or [`queue.get_job()`](/api-reference/queue/jobs). ```python @queue.task() @@ -116,7 +116,7 @@ current_job.publish(data: Any) -> None ``` Publish a partial result visible to -[`job.stream()`](/docs/api-reference/result) consumers. Use this to stream +[`job.stream()`](/api-reference/result) consumers. Use this to stream intermediate data from long-running tasks. `data` must be JSON-serializable. It is stored as a task log entry with diff --git a/docs/content/docs/api-reference/index.mdx b/docs/content/docs/api-reference/index.mdx index b778af5..7ee5a0a 100644 --- a/docs/content/docs/api-reference/index.mdx +++ b/docs/content/docs/api-reference/index.mdx @@ -23,55 +23,55 @@ signature, parameters, return values, and a short example. } title="Overview" - href="/docs/api-reference/overview" + href="/api-reference/overview" description="The shape of the public API — what's stable, what's experimental." /> } title="Queue" - href="/docs/api-reference/queue" + href="/api-reference/queue" description="Construct queues, enqueue jobs, manage workers, inspect state." /> } title="Task" - href="/docs/api-reference/task" + href="/api-reference/task" description="The @queue.task decorator — options, methods, async variants." /> } title="Result" - href="/docs/api-reference/result" + href="/api-reference/result" description="JobResult, polling, awaiting, timeouts, sync and async APIs." /> } title="Context" - href="/docs/api-reference/context" + href="/api-reference/context" description="current_job — progress, logging, cancellation, timeouts inside a task." /> } title="Canvas" - href="/docs/api-reference/canvas" + href="/api-reference/canvas" description="chain, group, chord — the Celery-compatible composition primitives." /> } title="Workflows" - href="/docs/api-reference/workflows" + href="/api-reference/workflows" description="The DAG builder — fan-out, fan-in, gates, conditions, sub-workflows." /> } title="Testing" - href="/docs/api-reference/testing" + href="/api-reference/testing" description="test_mode, MockResource, fixtures for synchronous in-process verification." /> } title="CLI" - href="/docs/api-reference/cli" + href="/api-reference/cli" description="taskito worker, dashboard, info — every flag and subcommand." /> diff --git a/docs/content/docs/api-reference/overview.mdx b/docs/content/docs/api-reference/overview.mdx index 162254d..d203902 100644 --- a/docs/content/docs/api-reference/overview.mdx +++ b/docs/content/docs/api-reference/overview.mdx @@ -7,11 +7,11 @@ Complete Python API reference for all public classes and methods. | Class | Description | |-------|-------------| -| [Queue](/docs/api-reference/queue) | Central orchestrator — task registration, enqueue, workers, and all queue operations | -| [TaskWrapper](/docs/api-reference/task) | Handle returned by `@queue.task()` — `delay()`, `apply_async()`, `map()`, signatures | -| [JobResult](/docs/api-reference/result) | Handle for an enqueued job — status polling, result retrieval, dependencies | -| [JobContext](/docs/api-reference/context) | Runtime context inside a running task — job ID, retry count, progress updates | -| [Canvas](/docs/api-reference/canvas) | Workflow primitives — `Signature`, `chain`, `group`, `chord` | -| [Workflows](/docs/api-reference/workflows) | DAG workflow builder, `WorkflowRun`, gates, sub-workflows | -| [Testing](/docs/api-reference/testing) | Test mode, `TestResult`, `MockResource` for unit testing tasks | -| [CLI](/docs/api-reference/cli) | `taskito` command-line interface — `worker`, `info`, `scaler` | +| [Queue](/api-reference/queue) | Central orchestrator — task registration, enqueue, workers, and all queue operations | +| [TaskWrapper](/api-reference/task) | Handle returned by `@queue.task()` — `delay()`, `apply_async()`, `map()`, signatures | +| [JobResult](/api-reference/result) | Handle for an enqueued job — status polling, result retrieval, dependencies | +| [JobContext](/api-reference/context) | Runtime context inside a running task — job ID, retry count, progress updates | +| [Canvas](/api-reference/canvas) | Workflow primitives — `Signature`, `chain`, `group`, `chord` | +| [Workflows](/api-reference/workflows) | DAG workflow builder, `WorkflowRun`, gates, sub-workflows | +| [Testing](/api-reference/testing) | Test mode, `TestResult`, `MockResource` for unit testing tasks | +| [CLI](/api-reference/cli) | `taskito` command-line interface — `worker`, `info`, `scaler` | diff --git a/docs/content/docs/api-reference/queue/index.mdx b/docs/content/docs/api-reference/queue/index.mdx index 6b27f86..23e58b4 100644 --- a/docs/content/docs/api-reference/queue/index.mdx +++ b/docs/content/docs/api-reference/queue/index.mdx @@ -10,11 +10,11 @@ The central class for creating and managing a task queue. The Queue API is split across several pages for readability: - - **[Job Management](/docs/api-reference/queue/jobs)** — get, list, cancel, archive, replay jobs - - **[Queue & Stats](/docs/api-reference/queue/queues)** — rate limits, concurrency, pause/resume, statistics, dead letters - - **[Workers & Hooks](/docs/api-reference/queue/workers)** — run workers, lifecycle hooks, circuit breakers, async methods - - **[Resources & Locking](/docs/api-reference/queue/resources)** — resource system, distributed locks - - **[Events & Logs](/docs/api-reference/queue/events)** — event callbacks, webhooks, structured logs + - **[Job Management](/api-reference/queue/jobs)** — get, list, cancel, archive, replay jobs + - **[Queue & Stats](/api-reference/queue/queues)** — rate limits, concurrency, pause/resume, statistics, dead letters + - **[Workers & Hooks](/api-reference/queue/workers)** — run workers, lifecycle hooks, circuit breakers, async methods + - **[Resources & Locking](/api-reference/queue/resources)** — resource system, distributed locks + - **[Events & Logs](/api-reference/queue/events)** — event callbacks, webhooks, structured logs ## Constructor @@ -54,7 +54,7 @@ Queue( | `result_ttl` | `int \| None` | `None` | Auto-cleanup completed/dead jobs older than this many seconds. `None` disables. | | `middleware` | `list[TaskMiddleware] \| None` | `None` | Queue-level middleware applied to all tasks. | | `drain_timeout` | `int` | `30` | Seconds to wait for in-flight tasks during graceful shutdown. | -| `interception` | `str` | `"off"` | Argument interception mode: `"strict"`, `"lenient"`, or `"off"`. See [Resource System](/docs/guides/resources). | +| `interception` | `str` | `"off"` | Argument interception mode: `"strict"`, `"lenient"`, or `"off"`. See [Resource System](/guides/resources). | | `max_intercept_depth` | `int` | `10` | Max recursion depth for argument walking. | | `recipe_signing_key` | `str \| None` | `None` | HMAC-SHA256 key for proxy recipe integrity. Falls back to `TASKITO_RECIPE_SECRET` env var. | | `max_reconstruction_timeout` | `int` | `10` | Max seconds allowed for proxy reconstruction. | @@ -92,7 +92,7 @@ Queue( ) -> TaskWrapper ``` -Register a function as a background task. Returns a [`TaskWrapper`](/docs/api-reference/task). +Register a function as a background task. Returns a [`TaskWrapper`](/api-reference/task). | Parameter | Type | Default | Description | |---|---|---|---| @@ -109,7 +109,7 @@ Register a function as a background task. Returns a [`TaskWrapper`](/docs/api-re | `circuit_breaker` | `dict \| None` | `None` | Circuit breaker config: `{"threshold": 5, "window": 60, "cooldown": 120}`. | | `middleware` | `list[TaskMiddleware] \| None` | `None` | Per-task middleware, applied in addition to queue-level middleware. | | `expires` | `float \| None` | `None` | Seconds until the job expires if not started. | -| `inject` | `list[str] \| None` | `None` | Resource names to inject as keyword arguments. See [Resource System](/docs/guides/resources). | +| `inject` | `list[str] \| None` | `None` | Resource names to inject as keyword arguments. See [Resource System](/guides/resources). | | `serializer` | `Serializer \| None` | `None` | Per-task serializer override. Falls back to queue-level serializer. | | `max_concurrent` | `int \| None` | `None` | Max concurrent running instances. `None` = no limit. | @@ -157,11 +157,11 @@ queue.enqueue( ) -> JobResult ``` -Enqueue a task for execution. Returns a [`JobResult`](/docs/api-reference/result) handle. +Enqueue a task for execution. Returns a [`JobResult`](/api-reference/result) handle. | Parameter | Type | Default | Description | |---|---|---|---| -| `depends_on` | `str \| list[str] \| None` | `None` | Job ID(s) this job depends on. See [Dependencies](/docs/guides/advanced-execution). | +| `depends_on` | `str \| list[str] \| None` | `None` | Job ID(s) this job depends on. See [Dependencies](/guides/advanced-execution). | ### `queue.enqueue_many()` diff --git a/docs/content/docs/api-reference/queue/resources.mdx b/docs/content/docs/api-reference/queue/resources.mdx index b7a9b2d..fd183b8 100644 --- a/docs/content/docs/api-reference/queue/resources.mdx +++ b/docs/content/docs/api-reference/queue/resources.mdx @@ -63,7 +63,7 @@ queue.load_resources(toml_path: str) -> None ``` Load resource definitions from a TOML file. Must be called before `run_worker()`. -See [TOML configuration](/docs/guides/resources). +See [TOML configuration](/guides/resources). ### `queue.health_check()` diff --git a/docs/content/docs/api-reference/result.mdx b/docs/content/docs/api-reference/result.mdx index 9e6dcb0..d5de9a1 100644 --- a/docs/content/docs/api-reference/result.mdx +++ b/docs/content/docs/api-reference/result.mdx @@ -6,9 +6,9 @@ description: "Handle for an enqueued job — status polling, result retrieval, d Handle to an enqueued job. Provides methods to check status and retrieve results, both synchronously and asynchronously. -Returned by [`task.delay()`](/docs/api-reference/task), -[`task.apply_async()`](/docs/api-reference/task), -[`queue.enqueue()`](/docs/api-reference/queue), and canvas operations. +Returned by [`task.delay()`](/api-reference/task), +[`task.apply_async()`](/api-reference/task), +[`queue.enqueue()`](/api-reference/queue), and canvas operations. ## Properties @@ -45,7 +45,7 @@ job.progress -> int | None ``` Current progress (0–100) if reported by the task via -[`current_job.update_progress()`](/docs/api-reference/context). Returns `None` +[`current_job.update_progress()`](/api-reference/context). Returns `None` if no progress has been reported. Refreshes from the database. ### `job.error` @@ -88,7 +88,7 @@ job.dependencies -> list[str] ``` List of job IDs this job depends on. Returns an empty list if the job has no -dependencies. See [Dependencies](/docs/guides/advanced-execution). +dependencies. See [Dependencies](/guides/advanced-execution). ### `job.dependents` @@ -108,8 +108,8 @@ job.to_dict() -> dict ``` Return all job fields as a plain dictionary. Useful for JSON serialization -(e.g. in the [dashboard](/docs/guides/observability) or -[FastAPI integration](/docs/guides/integrations)). +(e.g. in the [dashboard](/guides/observability) or +[FastAPI integration](/guides/integrations)). ### `job.result()` @@ -192,7 +192,7 @@ job.stream( ``` Iterate over partial results published by the task via -[`current_job.publish()`](/docs/api-reference/context). Yields each result as +[`current_job.publish()`](/api-reference/context). Yields each result as it arrives, stops when the job reaches a terminal state. | Parameter | Type | Default | Description | diff --git a/docs/content/docs/api-reference/task.mdx b/docs/content/docs/api-reference/task.mdx index 2a74cc6..271bee6 100644 --- a/docs/content/docs/api-reference/task.mdx +++ b/docs/content/docs/api-reference/task.mdx @@ -26,7 +26,7 @@ task.delay(*args, **kwargs) -> JobResult ``` Enqueue the task for background execution using the decorator's default options. -Returns a [`JobResult`](/docs/api-reference/result) handle. +Returns a [`JobResult`](/api-reference/result) handle. ```python @queue.task(priority=5) @@ -68,7 +68,7 @@ falls back to the decorator's default. | `timeout` | `int \| None` | `None` | Override timeout in seconds | | `unique_key` | `str \| None` | `None` | Deduplicate active jobs with same key | | `metadata` | `str \| None` | `None` | Arbitrary JSON metadata to attach | -| `depends_on` | `str \| list[str] \| None` | `None` | Job ID(s) this job depends on. See [Dependencies](/docs/guides/advanced-execution). | +| `depends_on` | `str \| list[str] \| None` | `None` | Job ID(s) this job depends on. See [Dependencies](/guides/advanced-execution). | ```python job = send_email.apply_async( @@ -102,8 +102,8 @@ print(results) # [3, 7, 11] task.s(*args, **kwargs) -> Signature ``` -Create a **mutable** [`Signature`](/docs/api-reference/canvas). In a -[`chain`](/docs/api-reference/canvas), the previous task's return value is +Create a **mutable** [`Signature`](/api-reference/canvas). In a +[`chain`](/api-reference/canvas), the previous task's return value is prepended to `args`. ```python @@ -118,7 +118,7 @@ sig = add.s(10) task.si(*args, **kwargs) -> Signature ``` -Create an **immutable** [`Signature`](/docs/api-reference/canvas). Ignores the +Create an **immutable** [`Signature`](/api-reference/canvas). Ignores the previous task's result — arguments are used as-is. ```python diff --git a/docs/content/docs/architecture/failure-model.mdx b/docs/content/docs/architecture/failure-model.mdx index 545b997..a04f18f 100644 --- a/docs/content/docs/architecture/failure-model.mdx +++ b/docs/content/docs/architecture/failure-model.mdx @@ -35,7 +35,7 @@ Same behavior as database unavailable. The scheduler retries on the next poll cy `claim_execution` prevents two workers from picking up the same job simultaneously. But if a worker crashes *after* starting execution, the job will be retried — potentially executing the same task twice. Design tasks to be -[idempotent](/docs/guides/reliability) to handle this safely. +[idempotent](/guides/reliability) to handle this safely. ## Recovery timeline @@ -46,7 +46,7 @@ potentially executing the same task twice. Design tasks to be If a task completes successfully but the result write to the database fails (e.g., database full, connection lost), the job stays in `running` status. The stale reaper eventually marks it failed and retries it. The task will execute again — make sure -it's [idempotent](/docs/guides/reliability). +it's [idempotent](/guides/reliability). ## Jobs without timeouts diff --git a/docs/content/docs/architecture/index.mdx b/docs/content/docs/architecture/index.mdx index b3560bd..cf1b786 100644 --- a/docs/content/docs/architecture/index.mdx +++ b/docs/content/docs/architecture/index.mdx @@ -22,49 +22,49 @@ high-level model, then drill into the layer that interests you. } title="Overview" - href="/docs/architecture/overview" + href="/architecture/overview" description="The big picture — Python ↔ PyO3 ↔ Rust core, end to end." /> } title="Job lifecycle" - href="/docs/architecture/job-lifecycle" + href="/architecture/job-lifecycle" description="Every state a job moves through, from enqueue to result or dead letter." /> } title="Worker pool" - href="/docs/architecture/worker-pool" + href="/architecture/worker-pool" description="OS-thread pool, prefork children, async executor — how each model dispatches work." /> } title="Scheduler" - href="/docs/architecture/scheduler" + href="/architecture/scheduler" description="The Tokio polling loop — how jobs are picked, claimed, and routed to workers." /> } title="Storage" - href="/docs/architecture/storage" + href="/architecture/storage" description="The Storage trait, Diesel for SQLite/Postgres, Redis backend, table schemas." /> } title="Resources" - href="/docs/architecture/resources" + href="/architecture/resources" description="The 3-layer DI pipeline — argument interception, worker injection, proxy reconstruction." /> } title="Failure model" - href="/docs/architecture/failure-model" + href="/architecture/failure-model" description="Retries, dead letters, circuit breakers, cancellation — what happens when things go wrong." /> } title="Serialization" - href="/docs/architecture/serialization" + href="/architecture/serialization" description="Cloudpickle, JSON, MsgPack — how arguments and results cross the worker boundary." /> diff --git a/docs/content/docs/architecture/overview.mdx b/docs/content/docs/architecture/overview.mdx index 3bac704..b82c4ac 100644 --- a/docs/content/docs/architecture/overview.mdx +++ b/docs/content/docs/architecture/overview.mdx @@ -13,10 +13,10 @@ worker management. | Page | What it covers | |---|---| -| [Job Lifecycle](/docs/architecture/job-lifecycle) | State machine, status codes, transitions | -| [Worker Pool](/docs/architecture/worker-pool) | Thread architecture, async dispatch, GIL management | -| [Storage Layer](/docs/architecture/storage) | SQLite pragmas, schema, indexes, Postgres differences | -| [Scheduler](/docs/architecture/scheduler) | Poll loop, dispatch flow, periodic tasks | -| [Resource System](/docs/architecture/resources) | Argument interception, DI, proxy reconstruction | -| [Failure Model](/docs/architecture/failure-model) | Crash recovery, duplicate execution, partial writes | -| [Serialization](/docs/architecture/serialization) | Pluggable serializers, format details | +| [Job Lifecycle](/architecture/job-lifecycle) | State machine, status codes, transitions | +| [Worker Pool](/architecture/worker-pool) | Thread architecture, async dispatch, GIL management | +| [Storage Layer](/architecture/storage) | SQLite pragmas, schema, indexes, Postgres differences | +| [Scheduler](/architecture/scheduler) | Poll loop, dispatch flow, periodic tasks | +| [Resource System](/architecture/resources) | Argument interception, DI, proxy reconstruction | +| [Failure Model](/architecture/failure-model) | Crash recovery, duplicate execution, partial writes | +| [Serialization](/architecture/serialization) | Pluggable serializers, format details | diff --git a/docs/content/docs/architecture/storage.mdx b/docs/content/docs/architecture/storage.mdx index bc030d1..a577487 100644 --- a/docs/content/docs/architecture/storage.mdx +++ b/docs/content/docs/architecture/storage.mdx @@ -158,7 +158,7 @@ per-connection). ## Postgres differences taskito also supports PostgreSQL as an alternative storage backend. See the -[Postgres backend guide](/docs/guides/operations) for full details. +[Postgres backend guide](/guides/operations) for full details. - **Connection pooling**: `r2d2` pool with a default of 10 connections (vs. 8 for SQLite) - **Schema isolation**: all tables are created inside a configurable PostgreSQL schema diff --git a/docs/content/docs/getting-started/concepts.mdx b/docs/content/docs/getting-started/concepts.mdx index 0962574..867bb04 100644 --- a/docs/content/docs/getting-started/concepts.mdx +++ b/docs/content/docs/getting-started/concepts.mdx @@ -10,12 +10,12 @@ Get taskito installed and running in under 5 minutes. diff --git a/docs/content/docs/getting-started/installation.mdx b/docs/content/docs/getting-started/installation.mdx index ff8c032..fbccc19 100644 --- a/docs/content/docs/getting-started/installation.mdx +++ b/docs/content/docs/getting-started/installation.mdx @@ -28,7 +28,7 @@ To use PostgreSQL as the storage backend instead of SQLite: pip install taskito[postgres] ``` -See the [Postgres backend guide](/docs/guides/operations) for configuration details. +See the [Postgres backend guide](/guides/operations) for configuration details. ## From source diff --git a/docs/content/docs/getting-started/quickstart.mdx b/docs/content/docs/getting-started/quickstart.mdx index 472fbcb..766ea48 100644 --- a/docs/content/docs/getting-started/quickstart.mdx +++ b/docs/content/docs/getting-started/quickstart.mdx @@ -122,12 +122,12 @@ taskito dashboard --app tasks:queue Open `http://localhost:8080` in your browser. The dashboard includes pages covering every aspect of your task queue — no extra dependencies needed. -[Dashboard guide →](/docs/guides/observability) +[Dashboard guide →](/guides/observability) ## Next steps -- [Tasks](/docs/guides/core) — decorator options, `.delay()` vs `.apply_async()` -- [Workers](/docs/guides/core) — CLI flags, graceful shutdown, worker count -- [Retries](/docs/guides/reliability) — exponential backoff, dead letter queue -- [Workflows](/docs/guides/workflows) — chain, group, chord -- [Testing](/docs/guides/operations) — run tasks synchronously in tests with `queue.test_mode()` +- [Tasks](/guides/core) — decorator options, `.delay()` vs `.apply_async()` +- [Workers](/guides/core) — CLI flags, graceful shutdown, worker count +- [Retries](/guides/reliability) — exponential backoff, dead letter queue +- [Workflows](/guides/workflows) — chain, group, chord +- [Testing](/guides/operations) — run tasks synchronously in tests with `queue.test_mode()` diff --git a/docs/content/docs/guides/advanced-execution/batch-enqueue.mdx b/docs/content/docs/guides/advanced-execution/batch-enqueue.mdx index dc056c2..5f3641b 100644 --- a/docs/content/docs/guides/advanced-execution/batch-enqueue.mdx +++ b/docs/content/docs/guides/advanced-execution/batch-enqueue.mdx @@ -41,4 +41,4 @@ jobs = queue.enqueue_many( Per-job lists (`delay_list`, `metadata_list`, `expires_list`, `result_ttl_list`) override uniform values when both are provided. See the -[API reference](/docs/api-reference/queue) for the full parameter list. +[API reference](/api-reference/queue) for the full parameter list. diff --git a/docs/content/docs/guides/advanced-execution/index.mdx b/docs/content/docs/guides/advanced-execution/index.mdx index d0849f1..eefb7a8 100644 --- a/docs/content/docs/guides/advanced-execution/index.mdx +++ b/docs/content/docs/guides/advanced-execution/index.mdx @@ -7,9 +7,9 @@ Patterns for scaling and optimizing task execution. | Guide | Description | |---|---| -| [Prefork Pool](/docs/guides/advanced-execution/prefork) | Process-based isolation for CPU-bound or memory-leaking tasks | -| [Native Async Tasks](/docs/guides/advanced-execution/async-tasks) | `async def` tasks with native event loop integration | -| [Result Streaming](/docs/guides/advanced-execution/streaming) | Stream partial results and progress updates in real time | -| [Dependencies](/docs/guides/advanced-execution/dependencies) | DAG-based job dependencies — run tasks in order | -| [Batch Enqueue](/docs/guides/advanced-execution/batch-enqueue) | Enqueue many jobs efficiently with `task.map()` and `enqueue_many()` | -| [Unique Tasks](/docs/guides/advanced-execution/unique-tasks) | Deduplicate active jobs with unique keys | +| [Prefork Pool](/guides/advanced-execution/prefork) | Process-based isolation for CPU-bound or memory-leaking tasks | +| [Native Async Tasks](/guides/advanced-execution/async-tasks) | `async def` tasks with native event loop integration | +| [Result Streaming](/guides/advanced-execution/streaming) | Stream partial results and progress updates in real time | +| [Dependencies](/guides/advanced-execution/dependencies) | DAG-based job dependencies — run tasks in order | +| [Batch Enqueue](/guides/advanced-execution/batch-enqueue) | Enqueue many jobs efficiently with `task.map()` and `enqueue_many()` | +| [Unique Tasks](/guides/advanced-execution/unique-tasks) | Deduplicate active jobs with unique keys | diff --git a/docs/content/docs/guides/core/execution-model.mdx b/docs/content/docs/guides/core/execution-model.mdx index 7ee5953..dd0cef9 100644 --- a/docs/content/docs/guides/core/execution-model.mdx +++ b/docs/content/docs/guides/core/execution-model.mdx @@ -66,7 +66,7 @@ instance. It must be a module-level name (`"module:attribute"` format) — tasks defined inside functions or closures cannot be imported by child processes. -For more details, see the [Prefork Pool guide](/docs/guides/advanced-execution). +For more details, see the [Prefork Pool guide](/guides/advanced-execution). ## Native async @@ -90,7 +90,7 @@ queue = Queue( ) ``` -For more details, see the [Native Async Tasks guide](/docs/guides/advanced-execution). +For more details, see the [Native Async Tasks guide](/guides/advanced-execution). ## Mixing sync and async diff --git a/docs/content/docs/guides/core/index.mdx b/docs/content/docs/guides/core/index.mdx index 7c11488..5a17059 100644 --- a/docs/content/docs/guides/core/index.mdx +++ b/docs/content/docs/guides/core/index.mdx @@ -7,9 +7,9 @@ The building blocks of every taskito application. | Guide | Description | |---|---| -| [Tasks](/docs/guides/core/tasks) | Define tasks with `@queue.task()`, configure retries, timeouts, and options | -| [Workers](/docs/guides/core/workers) | Start workers, control concurrency, graceful shutdown | -| [Execution Models](/docs/guides/core/execution-model) | How tasks move from enqueue to completion | -| [Queues & Priority](/docs/guides/core/queues) | Named queues, priority levels, and routing | -| [Scheduling](/docs/guides/core/scheduling) | Periodic tasks with cron expressions | -| [Workflows](/docs/guides/core/workflows) | Chains, groups, and chords for multi-step pipelines | +| [Tasks](/guides/core/tasks) | Define tasks with `@queue.task()`, configure retries, timeouts, and options | +| [Workers](/guides/core/workers) | Start workers, control concurrency, graceful shutdown | +| [Execution Models](/guides/core/execution-model) | How tasks move from enqueue to completion | +| [Queues & Priority](/guides/core/queues) | Named queues, priority levels, and routing | +| [Scheduling](/guides/core/scheduling) | Periodic tasks with cron expressions | +| [Workflows](/guides/core/workflows) | Chains, groups, and chords for multi-step pipelines | diff --git a/docs/content/docs/guides/core/tasks.mdx b/docs/content/docs/guides/core/tasks.mdx index 692eac9..31c311d 100644 --- a/docs/content/docs/guides/core/tasks.mdx +++ b/docs/content/docs/guides/core/tasks.mdx @@ -35,7 +35,7 @@ def process_data(data: dict) -> str: | `circuit_breaker` | `dict \| None` | `None` | Circuit breaker config: `{"threshold": 5, "window": 60, "cooldown": 120}`. | | `middleware` | `list[TaskMiddleware] \| None` | `None` | Per-task middleware, applied in addition to queue-level middleware. | | `expires` | `float \| None` | `None` | Seconds until the job expires if not started. | -| `inject` | `list[str] \| None` | `None` | Worker resource names to inject as keyword arguments. See [Resource System](/docs/guides/resources). | +| `inject` | `list[str] \| None` | `None` | Worker resource names to inject as keyword arguments. See [Resource System](/guides/resources). | | `serializer` | `Serializer \| None` | `None` | Per-task serializer override. Falls back to the queue-level serializer. | | `max_concurrent` | `int \| None` | `None` | Max concurrent running instances of this task. `None` means no limit. | diff --git a/docs/content/docs/guides/core/workers.mdx b/docs/content/docs/guides/core/workers.mdx index 7f38bc6..161a0ea 100644 --- a/docs/content/docs/guides/core/workers.mdx +++ b/docs/content/docs/guides/core/workers.mdx @@ -274,7 +274,7 @@ queue = Queue( ) ``` -See [Native Async Tasks](/docs/guides/advanced-execution) for the full guide. +See [Native Async Tasks](/guides/advanced-execution) for the full guide. ## How workers work diff --git a/docs/content/docs/guides/core/workflows.mdx b/docs/content/docs/guides/core/workflows.mdx index 107ed47..866dbec 100644 --- a/docs/content/docs/guides/core/workflows.mdx +++ b/docs/content/docs/guides/core/workflows.mdx @@ -4,10 +4,10 @@ description: "DAG workflows for multi-step pipelines and Canvas primitives for s --- taskito provides two workflow models. See the dedicated -[Workflows section](/docs/guides/workflows) for full documentation. +[Workflows section](/guides/workflows) for full documentation. -- **[DAG Workflows](/docs/guides/workflows)** — Multi-step pipelines as +- **[DAG Workflows](/guides/workflows)** — Multi-step pipelines as directed acyclic graphs with fan-out, conditions, gates, sub-workflows, incremental caching, and visualization. -- **[Canvas Primitives](/docs/api-reference/canvas)** — Lightweight chain, +- **[Canvas Primitives](/api-reference/canvas)** — Lightweight chain, group, and chord composition for simple pipelines. diff --git a/docs/content/docs/guides/extensibility/index.mdx b/docs/content/docs/guides/extensibility/index.mdx index 1950567..47a97be 100644 --- a/docs/content/docs/guides/extensibility/index.mdx +++ b/docs/content/docs/guides/extensibility/index.mdx @@ -7,6 +7,6 @@ Extend taskito with custom behavior at every stage of the task lifecycle. | Guide | Description | |---|---| -| [Middleware](/docs/guides/extensibility/middleware) | Hook into task execution with `before`, `after`, `on_retry`, and more | -| [Serializers](/docs/guides/extensibility/serializers) | Custom payload serialization — msgpack, orjson, encryption | -| [Events & Webhooks](/docs/guides/extensibility/events-webhooks) | React to queue events and push notifications to external services | +| [Middleware](/guides/extensibility/middleware) | Hook into task execution with `before`, `after`, `on_retry`, and more | +| [Serializers](/guides/extensibility/serializers) | Custom payload serialization — msgpack, orjson, encryption | +| [Events & Webhooks](/guides/extensibility/events-webhooks) | React to queue events and push notifications to external services | diff --git a/docs/content/docs/guides/extensibility/middleware.mdx b/docs/content/docs/guides/extensibility/middleware.mdx index 6ca78d1..b156fe8 100644 --- a/docs/content/docs/guides/extensibility/middleware.mdx +++ b/docs/content/docs/guides/extensibility/middleware.mdx @@ -222,4 +222,4 @@ queue = Queue(middleware=[ ]) ``` -See the [OpenTelemetry guide](/docs/guides/integrations) for setup details. +See the [OpenTelemetry guide](/guides/integrations) for setup details. diff --git a/docs/content/docs/guides/index.mdx b/docs/content/docs/guides/index.mdx index 262b94d..995172e 100644 --- a/docs/content/docs/guides/index.mdx +++ b/docs/content/docs/guides/index.mdx @@ -23,55 +23,55 @@ samples, gotchas, and links to the relevant API reference. } title="Core" - href="/docs/guides/core" + href="/guides/core" description="Define tasks, route to queues, run workers, schedule periodics." /> } title="Reliability" - href="/docs/guides/reliability" + href="/guides/reliability" description="Retries, dead letters, circuit breakers, idempotency, error handling." /> } title="Advanced execution" - href="/docs/guides/advanced-execution" + href="/guides/advanced-execution" description="Prefork pools, native async, streaming, cancellation, soft timeouts." /> } title="Operations" - href="/docs/guides/operations" + href="/guides/operations" description="Deployment, scaling, namespaces, migration from Celery." /> } title="Observability" - href="/docs/guides/observability" + href="/guides/observability" description="Metrics, logs, dashboard, OpenTelemetry, Sentry, Prometheus." /> } title="Resources" - href="/docs/guides/resources" + href="/guides/resources" description="Inject DB clients, HTTP sessions, and cloud SDKs by name with hot reload." /> } title="Workflows" - href="/docs/guides/workflows" + href="/guides/workflows" description="DAGs, fan-out, fan-in, conditions, gates, sub-workflows, incremental re-runs." /> } title="Integrations" - href="/docs/guides/integrations" + href="/guides/integrations" description="Django, FastAPI, Flask — admin views, REST routers, management commands." /> } title="Extensibility" - href="/docs/guides/extensibility" + href="/guides/extensibility" description="Custom serializers, middleware, events, webhooks, proxies." /> diff --git a/docs/content/docs/guides/integrations/index.mdx b/docs/content/docs/guides/integrations/index.mdx index ef42bee..9aa5be6 100644 --- a/docs/content/docs/guides/integrations/index.mdx +++ b/docs/content/docs/guides/integrations/index.mdx @@ -23,15 +23,15 @@ tools. Install only what you need. ## Framework integrations -- **[Flask](/docs/guides/integrations/flask)** — full Flask extension with app config, factory pattern, and CLI commands -- **[FastAPI](/docs/guides/integrations/fastapi)** — pre-built `APIRouter` with job status, SSE progress, and DLQ management -- **[Django](/docs/guides/integrations/django)** — admin views for browsing jobs, dead letters, and queue stats +- **[Flask](/guides/integrations/flask)** — full Flask extension with app config, factory pattern, and CLI commands +- **[FastAPI](/guides/integrations/fastapi)** — pre-built `APIRouter` with job status, SSE progress, and DLQ management +- **[Django](/guides/integrations/django)** — admin views for browsing jobs, dead letters, and queue stats ## Observability integrations -- **[OpenTelemetry](/docs/guides/integrations/otel)** — distributed tracing with per-task spans -- **[Prometheus](/docs/guides/integrations/prometheus)** — counters, histograms, and gauges for task execution -- **[Sentry](/docs/guides/integrations/sentry)** — automatic error capture with task context +- **[OpenTelemetry](/guides/integrations/otel)** — distributed tracing with per-task spans +- **[Prometheus](/guides/integrations/prometheus)** — counters, histograms, and gauges for task execution +- **[Sentry](/guides/integrations/sentry)** — automatic error capture with task context ## Combining integrations diff --git a/docs/content/docs/guides/integrations/otel.mdx b/docs/content/docs/guides/integrations/otel.mdx index 1c42c00..9d5c1b0 100644 --- a/docs/content/docs/guides/integrations/otel.mdx +++ b/docs/content/docs/guides/integrations/otel.mdx @@ -106,5 +106,5 @@ queue = Queue(middleware=[ lock. -See the [Middleware guide](/docs/guides/extensibility/middleware) for more +See the [Middleware guide](/guides/extensibility/middleware) for more on combining middleware. diff --git a/docs/content/docs/guides/integrations/prometheus.mdx b/docs/content/docs/guides/integrations/prometheus.mdx index ca9e389..fac36c3 100644 --- a/docs/content/docs/guides/integrations/prometheus.mdx +++ b/docs/content/docs/guides/integrations/prometheus.mdx @@ -160,7 +160,7 @@ queue = Queue( ) ``` -See the [Middleware guide](/docs/guides/extensibility/middleware) for more +See the [Middleware guide](/guides/extensibility/middleware) for more on combining middleware. ## Example: alert on high DLQ size diff --git a/docs/content/docs/guides/integrations/sentry.mdx b/docs/content/docs/guides/integrations/sentry.mdx index e553d3a..211c03f 100644 --- a/docs/content/docs/guides/integrations/sentry.mdx +++ b/docs/content/docs/guides/integrations/sentry.mdx @@ -100,7 +100,7 @@ queue = Queue( ) ``` -See the [Middleware guide](/docs/guides/extensibility/middleware) for more +See the [Middleware guide](/guides/extensibility/middleware) for more on combining middleware. ## Full example diff --git a/docs/content/docs/guides/observability/dashboard.mdx b/docs/content/docs/guides/observability/dashboard.mdx index dd8e905..192500b 100644 --- a/docs/content/docs/guides/observability/dashboard.mdx +++ b/docs/content/docs/guides/observability/dashboard.mdx @@ -226,7 +226,7 @@ Use the **Refresh** dropdown in the header — 2s, 5s, 10s, or off. The dashboard also exposes a full JSON API. See the - [Dashboard REST API](/docs/guides/observability/dashboard-api) reference + [Dashboard REST API](/guides/observability/dashboard-api) reference for all endpoints. diff --git a/docs/content/docs/guides/observability/index.mdx b/docs/content/docs/guides/observability/index.mdx index 2a42e90..9570dd9 100644 --- a/docs/content/docs/guides/observability/index.mdx +++ b/docs/content/docs/guides/observability/index.mdx @@ -7,7 +7,7 @@ Monitor, log, and inspect your task queue in real time. | Guide | Description | |---|---| -| [Monitoring & Hooks](/docs/guides/observability/monitoring) | Queue stats, progress tracking, worker heartbeat, and alerting hooks | -| [Structured Logging](/docs/guides/observability/logging) | Per-task structured logs with automatic context | -| [Web Dashboard](/docs/guides/observability/dashboard) | Built-in web UI for browsing jobs, metrics, and worker status | -| [Dashboard REST API](/docs/guides/observability/dashboard-api) | Programmatic access to all dashboard data via REST endpoints | +| [Monitoring & Hooks](/guides/observability/monitoring) | Queue stats, progress tracking, worker heartbeat, and alerting hooks | +| [Structured Logging](/guides/observability/logging) | Per-task structured logs with automatic context | +| [Web Dashboard](/guides/observability/dashboard) | Built-in web UI for browsing jobs, metrics, and worker status | +| [Dashboard REST API](/guides/observability/dashboard-api) | Programmatic access to all dashboard data via REST endpoints | diff --git a/docs/content/docs/guides/observability/monitoring.mdx b/docs/content/docs/guides/observability/monitoring.mdx index c9c0eb5..29247a2 100644 --- a/docs/content/docs/guides/observability/monitoring.mdx +++ b/docs/content/docs/guides/observability/monitoring.mdx @@ -120,7 +120,7 @@ workers = await queue.aworkers() The worker heartbeat is also available via the dashboard REST API at `GET /api/workers`. See the -[Dashboard](/docs/guides/observability/dashboard) guide for details. +[Dashboard](/guides/observability/dashboard) guide for details. ## Events system @@ -129,7 +129,7 @@ events (`JOB_ENQUEUED`, `JOB_COMPLETED`, `JOB_FAILED`, `JOB_RETRYING`, `JOB_DEAD`, `JOB_CANCELLED`). Events can also be delivered as signed HTTP webhooks to external systems. -[Events & Webhooks guide →](/docs/guides/extensibility) +[Events & Webhooks guide →](/guides/extensibility) ## Prometheus metrics @@ -140,7 +140,7 @@ counters, histograms, and gauges for task execution: pip install taskito[prometheus] ``` -[Prometheus integration →](/docs/guides/integrations) +[Prometheus integration →](/guides/integrations) ## Hooks diff --git a/docs/content/docs/guides/operations/deployment.mdx b/docs/content/docs/guides/operations/deployment.mdx index ab05a51..e74f887 100644 --- a/docs/content/docs/guides/operations/deployment.mdx +++ b/docs/content/docs/guides/operations/deployment.mdx @@ -160,7 +160,7 @@ Both methods are safe while the worker is running. ## Postgres deployment -If you're using the [Postgres backend](/docs/guides/operations/postgres), +If you're using the [Postgres backend](/guides/operations/postgres), deployment is simpler in several ways: - **No shared-file constraints** — workers connect over the network, no need for shared volumes or local storage @@ -204,7 +204,7 @@ pg_dump -h localhost -U taskito -d myapp -n taskito > backup.sql psql -h localhost -U taskito -d myapp < backup.sql ``` -See the [Postgres Backend guide](/docs/guides/operations/postgres) for full +See the [Postgres Backend guide](/guides/operations/postgres) for full configuration details. ## Database maintenance @@ -324,7 +324,7 @@ queue = Queue( ``` If you need distributed workers across multiple machines, use the -[Postgres backend](/docs/guides/operations/postgres) which removes the +[Postgres backend](/guides/operations/postgres) which removes the single-writer constraint and supports multi-machine deployments. ## SQLite scaling limits @@ -349,7 +349,7 @@ are serialized. This is the primary throughput ceiling. - Multiple processes contend heavily for writes (high lock wait times) - You need sub-millisecond dequeue latency under high load -taskito's [Postgres backend](/docs/guides/operations/postgres) addresses all +taskito's [Postgres backend](/guides/operations/postgres) addresses all of these limitations while keeping the same API. ## Sizing your deployment diff --git a/docs/content/docs/guides/operations/index.mdx b/docs/content/docs/guides/operations/index.mdx index 73456e9..08bf311 100644 --- a/docs/content/docs/guides/operations/index.mdx +++ b/docs/content/docs/guides/operations/index.mdx @@ -7,10 +7,10 @@ Run taskito reliably in production. | Guide | Description | |---|---| -| [Testing](/docs/guides/operations/testing) | Test mode, fixtures, mocking resources, and workflow testing | -| [Job Management](/docs/guides/operations/job-management) | Cancel, pause, archive, revoke, replay, and clean up jobs | -| [Troubleshooting](/docs/guides/operations/troubleshooting) | Diagnose stuck jobs, lock contention, and worker issues | -| [Deployment](/docs/guides/operations/deployment) | systemd, Docker, WAL mode, Postgres, and production checklists | -| [KEDA Autoscaling](/docs/guides/operations/keda) | Kubernetes event-driven autoscaling for workers | -| [Postgres Backend](/docs/guides/operations/postgres) | Set up and run taskito with PostgreSQL | -| [Migrating from Celery](/docs/guides/operations/migration) | Side-by-side comparison and step-by-step migration guide | +| [Testing](/guides/operations/testing) | Test mode, fixtures, mocking resources, and workflow testing | +| [Job Management](/guides/operations/job-management) | Cancel, pause, archive, revoke, replay, and clean up jobs | +| [Troubleshooting](/guides/operations/troubleshooting) | Diagnose stuck jobs, lock contention, and worker issues | +| [Deployment](/guides/operations/deployment) | systemd, Docker, WAL mode, Postgres, and production checklists | +| [KEDA Autoscaling](/guides/operations/keda) | Kubernetes event-driven autoscaling for workers | +| [Postgres Backend](/guides/operations/postgres) | Set up and run taskito with PostgreSQL | +| [Migrating from Celery](/guides/operations/migration) | Side-by-side comparison and step-by-step migration guide | diff --git a/docs/content/docs/guides/operations/keda.mdx b/docs/content/docs/guides/operations/keda.mdx index 17950ec..34bee69 100644 --- a/docs/content/docs/guides/operations/keda.mdx +++ b/docs/content/docs/guides/operations/keda.mdx @@ -193,7 +193,7 @@ spec: threshold: "0.8" ``` -See the [Prometheus integration](/docs/guides/integrations) for setting up +See the [Prometheus integration](/guides/integrations) for setting up the metrics collector. ## Deploy templates @@ -210,6 +210,6 @@ Ready-to-use YAML templates are included in the repository under When using SQLite, all worker replicas must share the same database volume. For multi-replica Kubernetes deployments, use the - [Postgres backend](/docs/guides/operations/postgres) — workers connect + [Postgres backend](/guides/operations/postgres) — workers connect over the network and there's no shared-file constraint. diff --git a/docs/content/docs/guides/operations/testing.mdx b/docs/content/docs/guides/operations/testing.mdx index fa61abc..4b696e9 100644 --- a/docs/content/docs/guides/operations/testing.mdx +++ b/docs/content/docs/guides/operations/testing.mdx @@ -53,7 +53,7 @@ with queue.test_mode(propagate_errors=False, resources=None) as results: | Parameter | Type | Default | Description | |---|---|---|---| | `propagate_errors` | `bool` | `False` | If `True`, task exceptions are re-raised immediately instead of being captured in `TestResult.error` | -| `resources` | `dict[str, Any] \| None` | `None` | Map of resource name → mock instance or `MockResource` for injection. See [Resource System](/docs/guides/resources). | +| `resources` | `dict[str, Any] \| None` | `None` | Map of resource name → mock instance or `MockResource` for injection. See [Resource System](/guides/resources). | The context manager yields a `TestResults` list that accumulates results as tasks execute. @@ -272,7 +272,7 @@ async def test_async_enqueue(task_results): ## Testing with worker resources -If your tasks use [worker resources](/docs/guides/resources) (injected via +If your tasks use [worker resources](/guides/resources) (injected via `inject=` or `Inject["name"]`), pass mock instances through `resources=`: ```python diff --git a/docs/content/docs/guides/reliability/error-handling.mdx b/docs/content/docs/guides/reliability/error-handling.mdx index f3d6710..82d5628 100644 --- a/docs/content/docs/guides/reliability/error-handling.mdx +++ b/docs/content/docs/guides/reliability/error-handling.mdx @@ -247,7 +247,7 @@ def on_task_failure(task_name, args, kwargs, error): ### Test mode for isolation -Use [test mode](/docs/guides/operations) to run tasks synchronously and inspect +Use [test mode](/guides/operations) to run tasks synchronously and inspect errors without a worker: ```python @@ -287,7 +287,7 @@ def call_api(url): return resp.json() ``` -See [Retries — Exception Filtering](/docs/guides/reliability/retries) for details. +See [Retries — Exception Filtering](/guides/reliability/retries) for details. ### Cancelling running tasks diff --git a/docs/content/docs/guides/reliability/guarantees.mdx b/docs/content/docs/guides/reliability/guarantees.mdx index 9a187f7..38040a7 100644 --- a/docs/content/docs/guides/reliability/guarantees.mdx +++ b/docs/content/docs/guides/reliability/guarantees.mdx @@ -84,7 +84,7 @@ job = send_report.apply_async( If a job with the same `unique_key` is already pending or running, the duplicate is silently dropped. See -[Unique Tasks](/docs/guides/advanced-execution) for details. +[Unique Tasks](/guides/advanced-execution) for details. ### Avoid side effects that can't be undone diff --git a/docs/content/docs/guides/reliability/index.mdx b/docs/content/docs/guides/reliability/index.mdx index d14893e..be23449 100644 --- a/docs/content/docs/guides/reliability/index.mdx +++ b/docs/content/docs/guides/reliability/index.mdx @@ -7,9 +7,9 @@ Harden your task queue for production workloads. | Guide | Description | |---|---| -| [Retries & Dead Letters](/docs/guides/reliability/retries) | Automatic retries with exponential backoff, dead letter queue | -| [Error Handling](/docs/guides/reliability/error-handling) | Task failure lifecycle, error inspection, debugging patterns | -| [Delivery Guarantees](/docs/guides/reliability/guarantees) | At-least-once delivery, idempotency, and exactly-once patterns | -| [Rate Limiting](/docs/guides/reliability/rate-limiting) | Throttle task execution with token bucket rate limits | -| [Circuit Breakers](/docs/guides/reliability/circuit-breakers) | Protect downstream services from cascading failures | -| [Distributed Locking](/docs/guides/reliability/locking) | Mutual exclusion across workers with database-backed locks | +| [Retries & Dead Letters](/guides/reliability/retries) | Automatic retries with exponential backoff, dead letter queue | +| [Error Handling](/guides/reliability/error-handling) | Task failure lifecycle, error inspection, debugging patterns | +| [Delivery Guarantees](/guides/reliability/guarantees) | At-least-once delivery, idempotency, and exactly-once patterns | +| [Rate Limiting](/guides/reliability/rate-limiting) | Throttle task execution with token bucket rate limits | +| [Circuit Breakers](/guides/reliability/circuit-breakers) | Protect downstream services from cascading failures | +| [Distributed Locking](/guides/reliability/locking) | Mutual exclusion across workers with database-backed locks | diff --git a/docs/content/docs/guides/resources/dependency-injection.mdx b/docs/content/docs/guides/resources/dependency-injection.mdx index dafeaf6..57304a7 100644 --- a/docs/content/docs/guides/resources/dependency-injection.mdx +++ b/docs/content/docs/guides/resources/dependency-injection.mdx @@ -115,7 +115,7 @@ def create_cache(): Pool configuration parameters (`pool_size`, `pool_min`, `acquire_timeout`, `max_lifetime`, `idle_timeout`) only apply to task-scoped resources. See -[Configuration](/docs/guides/resources/configuration) for details. +[Configuration](/guides/resources/configuration) for details. ## Dependencies @@ -236,7 +236,7 @@ status = queue.resource_status() ``` Task-scoped resources include a `"pool"` key with pool statistics. See -[Observability](/docs/guides/resources/observability) for details. +[Observability](/guides/resources/observability) for details. ## Full example diff --git a/docs/content/docs/guides/resources/index.mdx b/docs/content/docs/guides/resources/index.mdx index a533a78..c3dc6a1 100644 --- a/docs/content/docs/guides/resources/index.mdx +++ b/docs/content/docs/guides/resources/index.mdx @@ -87,9 +87,9 @@ taskito worker --app myapp.tasks:queue | Page | What it covers | |---|---| -| [Argument Interception](/docs/guides/resources/interception) | Modes, strategies, custom types, `analyze()`, metrics | -| [Dependency Injection](/docs/guides/resources/dependency-injection) | `worker_resource()`, scopes, dependencies, teardown, health checks | -| [Resource Proxies](/docs/guides/resources/proxies) | Built-in handlers, HMAC signing, security, `NoProxy`, cloud handlers | -| [Configuration](/docs/guides/resources/configuration) | TOML config, pool tuning, frozen and reloadable resources, hot reload | -| [Testing](/docs/guides/resources/testing) | `test_mode(resources=)`, `MockResource`, pytest fixtures | -| [Observability](/docs/guides/resources/observability) | Prometheus metrics, dashboard endpoints, CLI commands | +| [Argument Interception](/guides/resources/interception) | Modes, strategies, custom types, `analyze()`, metrics | +| [Dependency Injection](/guides/resources/dependency-injection) | `worker_resource()`, scopes, dependencies, teardown, health checks | +| [Resource Proxies](/guides/resources/proxies) | Built-in handlers, HMAC signing, security, `NoProxy`, cloud handlers | +| [Configuration](/guides/resources/configuration) | TOML config, pool tuning, frozen and reloadable resources, hot reload | +| [Testing](/guides/resources/testing) | `test_mode(resources=)`, `MockResource`, pytest fixtures | +| [Observability](/guides/resources/observability) | Prometheus metrics, dashboard endpoints, CLI commands | diff --git a/docs/content/docs/guides/resources/interception.mdx b/docs/content/docs/guides/resources/interception.mdx index 70a795f..05712da 100644 --- a/docs/content/docs/guides/resources/interception.mdx +++ b/docs/content/docs/guides/resources/interception.mdx @@ -92,7 +92,7 @@ These objects are deconstructed to a recipe dict and rebuilt by the worker: | boto3 clients (via `botocore.client.BaseClient`) | `"boto3_client"` | | `google.cloud.storage.Client` / `Bucket` / `Blob` | `"gcs_client"` | -See [Resource Proxies](/docs/guides/resources/proxies) for security options +See [Resource Proxies](/guides/resources/proxies) for security options and handler details. ## Built-in REJECT types @@ -192,5 +192,5 @@ stats = queue.interception_stats() # } ``` -See [Observability](/docs/guides/resources/observability) for Prometheus +See [Observability](/guides/resources/observability) for Prometheus metrics and dashboard endpoints. diff --git a/docs/content/docs/guides/resources/observability.mdx b/docs/content/docs/guides/resources/observability.mdx index 7dcc12b..35c5a19 100644 --- a/docs/content/docs/guides/resources/observability.mdx +++ b/docs/content/docs/guides/resources/observability.mdx @@ -122,7 +122,7 @@ Start the dashboard: taskito dashboard --app myapp.tasks:queue ``` -See the [Web Dashboard](/docs/guides/observability/dashboard) guide for +See the [Web Dashboard](/guides/observability/dashboard) guide for full dashboard documentation. ## CLI commands @@ -214,5 +214,5 @@ from taskito.contrib.prometheus import start_metrics_server start_metrics_server(port=9090) ``` -See the [Prometheus integration](/docs/guides/integrations) page for full +See the [Prometheus integration](/guides/integrations) page for full setup instructions. diff --git a/docs/content/docs/guides/resources/proxies.mdx b/docs/content/docs/guides/resources/proxies.mdx index 235cb7c..2863183 100644 --- a/docs/content/docs/guides/resources/proxies.mdx +++ b/docs/content/docs/guides/resources/proxies.mdx @@ -181,5 +181,5 @@ stats = queue.proxy_stats() # ] ``` -See [Observability](/docs/guides/resources/observability) for Prometheus +See [Observability](/guides/resources/observability) for Prometheus metrics and dashboard endpoints. diff --git a/docs/content/docs/guides/workflows/building.mdx b/docs/content/docs/guides/workflows/building.mdx index e3c5ce5..3be147c 100644 --- a/docs/content/docs/guides/workflows/building.mdx +++ b/docs/content/docs/guides/workflows/building.mdx @@ -106,7 +106,7 @@ This creates a `WorkflowRun` handle. Under the hood: | `name` | `str` | `"workflow"` | Workflow name | | `version` | `int` | `1` | Version number | | `on_failure` | `str` | `"fail_fast"` | Error strategy: `"fail_fast"` or `"continue"` | -| `cache_ttl` | `float` | `None` | Cache TTL in seconds for [incremental runs](/docs/guides/workflows/caching) | +| `cache_ttl` | `float` | `None` | Cache TTL in seconds for [incremental runs](/guides/workflows/caching) | ## Node statuses diff --git a/docs/content/docs/guides/workflows/fan-out.mdx b/docs/content/docs/guides/workflows/fan-out.mdx index dc63c2b..85c35ed 100644 --- a/docs/content/docs/guides/workflows/fan-out.mdx +++ b/docs/content/docs/guides/workflows/fan-out.mdx @@ -109,7 +109,7 @@ By default (`on_failure="fail_fast"`), if any fan-out child fails: - The fan-in and downstream steps are `SKIPPED` - The workflow transitions to `FAILED` -Combine with [conditions](/docs/guides/workflows/conditions) for more +Combine with [conditions](/guides/workflows/conditions) for more control: ```python diff --git a/docs/content/docs/guides/workflows/index.mdx b/docs/content/docs/guides/workflows/index.mdx index 7d15778..661ec38 100644 --- a/docs/content/docs/guides/workflows/index.mdx +++ b/docs/content/docs/guides/workflows/index.mdx @@ -50,11 +50,11 @@ print(result.state) # WorkflowState.COMPLETED | Page | What it covers | |---|---| -| [Building Workflows](/docs/guides/workflows/building) | `Workflow.step()`, decorator pattern, step configuration, DAG structure | -| [Fan-Out & Fan-In](/docs/guides/workflows/fan-out) | Splitting results into parallel jobs, collecting with aggregation | -| [Conditions & Error Handling](/docs/guides/workflows/conditions) | `on_success`, `on_failure`, `always`, callable conditions, `on_failure` modes | -| [Approval Gates](/docs/guides/workflows/gates) | Human-in-the-loop pause/resume, timeout, approve/reject API | -| [Sub-Workflows & Scheduling](/docs/guides/workflows/composition) | Nesting workflows, cron-scheduled runs | -| [Incremental Runs](/docs/guides/workflows/caching) | Result hashing, `CACHE_HIT`, dirty-set propagation, TTL | -| [Analysis & Visualization](/docs/guides/workflows/analysis) | Critical path, bottleneck analysis, Mermaid/DOT rendering | -| [Canvas Primitives](/docs/guides/workflows/canvas) | Chain, group, chord — simple composition without DAGs | +| [Building Workflows](/guides/workflows/building) | `Workflow.step()`, decorator pattern, step configuration, DAG structure | +| [Fan-Out & Fan-In](/guides/workflows/fan-out) | Splitting results into parallel jobs, collecting with aggregation | +| [Conditions & Error Handling](/guides/workflows/conditions) | `on_success`, `on_failure`, `always`, callable conditions, `on_failure` modes | +| [Approval Gates](/guides/workflows/gates) | Human-in-the-loop pause/resume, timeout, approve/reject API | +| [Sub-Workflows & Scheduling](/guides/workflows/composition) | Nesting workflows, cron-scheduled runs | +| [Incremental Runs](/guides/workflows/caching) | Result hashing, `CACHE_HIT`, dirty-set propagation, TTL | +| [Analysis & Visualization](/guides/workflows/analysis) | Critical path, bottleneck analysis, Mermaid/DOT rendering | +| [Canvas Primitives](/guides/workflows/canvas) | Chain, group, chord — simple composition without DAGs | diff --git a/docs/content/docs/index.mdx b/docs/content/docs/index.mdx deleted file mode 100644 index 7e42a9a..0000000 --- a/docs/content/docs/index.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Taskito -description: Rust-powered task queue for Python. No broker required. ---- - -import { Cards, Card } from "fumadocs-ui/components/card"; -import { Rocket, BookOpen, Boxes, Code2 } from "lucide-react"; - -A brokerless, Rust-powered task queue for Python. Replace Celery without Redis. - -Start with SQLite, scale to Postgres. No broker to install, configure, or manage. - -```bash -pip install taskito -``` - -Most Python task queues require a separate broker (Redis, RabbitMQ) that you have -to install, configure, monitor, and keep running. **taskito** embeds everything -into a single SQLite file — the queue, the results, the rate limits, the -schedules. Just `pip install` and go. - -The core engine is written in **Rust** for performance: job dispatch, retry -scheduling, rate limiting, and storage all happen in compiled native code. -Python only runs during actual task execution. - -## Browse the docs - - - } - title="Getting Started" - href="/docs/getting-started/installation" - description="Install and run your first task in 5 minutes." - /> - } - title="Guides" - href="/docs/guides" - description="Topical walkthroughs grouped by intent — core, reliability, advanced execution, operations, more." - /> - } - title="Architecture" - href="/docs/architecture" - description="How the Rust core, scheduler, storage, and worker pool fit together." - /> - } - title="API Reference" - href="/docs/api-reference" - description="Every public class, method, and CLI command with signatures and examples." - /> - diff --git a/docs/content/docs/meta.json b/docs/content/docs/meta.json index de0fe69..f40ac55 100644 --- a/docs/content/docs/meta.json +++ b/docs/content/docs/meta.json @@ -1,7 +1,6 @@ { "title": "Taskito", "pages": [ - "index", "getting-started", "guides", "architecture", diff --git a/docs/content/docs/more/comparison.mdx b/docs/content/docs/more/comparison.mdx index 0495e96..d34610d 100644 --- a/docs/content/docs/more/comparison.mdx +++ b/docs/content/docs/more/comparison.mdx @@ -77,7 +77,7 @@ widely adopted. **Choose taskito** if you want zero-infrastructure simplicity on a single machine. **Choose Celery** if you need distributed workers, complex routing, or enterprise features. -Looking to switch? See the [Migrating from Celery](/docs/guides/operations) guide for a +Looking to switch? See the [Migrating from Celery](/guides/operations) guide for a step-by-step walkthrough with side-by-side code examples. ### vs RQ (Redis Queue) diff --git a/docs/content/docs/more/examples/index.mdx b/docs/content/docs/more/examples/index.mdx index 1b76381..5c0658a 100644 --- a/docs/content/docs/more/examples/index.mdx +++ b/docs/content/docs/more/examples/index.mdx @@ -7,9 +7,9 @@ End-to-end examples demonstrating common taskito patterns. | Example | Description | |---------|-------------| -| [FastAPI Service](/docs/more/examples/fastapi-service) | REST API that enqueues tasks and streams progress via SSE | -| [Notification Service](/docs/more/examples/notifications) | Multi-channel notifications with retries and rate limiting | -| [Web Scraper Pipeline](/docs/more/examples/web-scraper) | Distributed scraping with chains and error handling | -| [Data Pipeline](/docs/more/examples/data-pipeline) | ETL pipeline with dependencies, groups, and chords | -| [DAG Workflows](/docs/more/examples/workflows) | Fan-out, conditions, gates, sub-workflows, incremental runs | -| [Benchmark](/docs/more/examples/benchmark) | Performance benchmarks comparing taskito to alternatives | +| [FastAPI Service](/more/examples/fastapi-service) | REST API that enqueues tasks and streams progress via SSE | +| [Notification Service](/more/examples/notifications) | Multi-channel notifications with retries and rate limiting | +| [Web Scraper Pipeline](/more/examples/web-scraper) | Distributed scraping with chains and error handling | +| [Data Pipeline](/more/examples/data-pipeline) | ETL pipeline with dependencies, groups, and chords | +| [DAG Workflows](/more/examples/workflows) | Fan-out, conditions, gates, sub-workflows, incremental runs | +| [Benchmark](/more/examples/benchmark) | Performance benchmarks comparing taskito to alternatives | diff --git a/docs/content/docs/more/faq.mdx b/docs/content/docs/more/faq.mdx index 82a31f9..7a30b15 100644 --- a/docs/content/docs/more/faq.mdx +++ b/docs/content/docs/more/faq.mdx @@ -96,7 +96,7 @@ Use the **Postgres backend** (`pip install taskito[postgres]`) when you need: - **Existing Postgres infrastructure** — leverage your existing database and backups For single-machine workloads, SQLite is simpler and requires zero setup. See -the [Postgres backend guide](/docs/guides/operations). +the [Postgres backend guide](/guides/operations). ## Is taskito production-ready? @@ -104,7 +104,7 @@ taskito is suitable for production workloads — background job processing, periodic tasks, data pipelines, and similar use cases. For single-machine deployments, use the default SQLite backend. For -multi-server setups, use the [Postgres backend](/docs/guides/operations). +multi-server setups, use the [Postgres backend](/guides/operations). ## What observability options does taskito support? @@ -112,9 +112,9 @@ taskito offers three observability integrations, each suited to different needs: | Integration | Best for | Install | |-------------|----------|---------| -| **[OpenTelemetry](/docs/guides/integrations)** | Distributed tracing, correlating tasks with HTTP requests | `pip install taskito[otel]` | -| **[Prometheus](/docs/guides/integrations)** | Metrics dashboards, alerting on queue depth/error rates | `pip install taskito[prometheus]` | -| **[Sentry](/docs/guides/integrations)** | Error tracking with rich context and breadcrumbs | `pip install taskito[sentry]` | +| **[OpenTelemetry](/guides/integrations)** | Distributed tracing, correlating tasks with HTTP requests | `pip install taskito[otel]` | +| **[Prometheus](/guides/integrations)** | Metrics dashboards, alerting on queue depth/error rates | `pip install taskito[prometheus]` | +| **[Sentry](/guides/integrations)** | Error tracking with rich context and breadcrumbs | `pip install taskito[sentry]` | All three are implemented as `TaskMiddleware` and can be combined together. @@ -153,7 +153,7 @@ stats = await queue.astats() Sync and async tasks can coexist in the same queue. The worker automatically routes each job to the correct pool based on the task type. See the -[Async Tasks guide](/docs/guides/advanced-execution) for details including +[Async Tasks guide](/guides/advanced-execution) for details including `async_concurrency` tuning and `current_job` context in async tasks. ## What serialization format does taskito use? diff --git a/docs/src/app/docs/[[...slug]]/page.tsx b/docs/src/app/(docs)/[...slug]/page.tsx similarity index 94% rename from docs/src/app/docs/[[...slug]]/page.tsx rename to docs/src/app/(docs)/[...slug]/page.tsx index 074d053..c16b155 100644 --- a/docs/src/app/docs/[[...slug]]/page.tsx +++ b/docs/src/app/(docs)/[...slug]/page.tsx @@ -13,7 +13,7 @@ import { getMDXComponents } from "@/components/mdx"; import { gitConfig } from "@/lib/shared"; import { getPageImage, getPageMarkdownUrl, source } from "@/lib/source"; -export default async function Page(props: PageProps<"/docs/[[...slug]]">) { +export default async function Page(props: PageProps<"/[...slug]">) { const params = await props.params; const page = source.getPage(params.slug); if (!page) notFound(); @@ -51,7 +51,7 @@ export async function generateStaticParams() { } export async function generateMetadata( - props: PageProps<"/docs/[[...slug]]">, + props: PageProps<"/[...slug]">, ): Promise { const params = await props.params; const page = source.getPage(params.slug); diff --git a/docs/src/app/docs/layout.tsx b/docs/src/app/(docs)/layout.tsx similarity index 79% rename from docs/src/app/docs/layout.tsx rename to docs/src/app/(docs)/layout.tsx index efeef54..cdde5f7 100644 --- a/docs/src/app/docs/layout.tsx +++ b/docs/src/app/(docs)/layout.tsx @@ -2,7 +2,7 @@ import { DocsLayout } from "fumadocs-ui/layouts/docs"; import { baseOptions } from "@/lib/layout.shared"; import { source } from "@/lib/source"; -export default function Layout({ children }: LayoutProps<"/docs">) { +export default function Layout({ children }: LayoutProps<"/">) { return ( {children} diff --git a/docs/src/app/llms.mdx/docs/[[...slug]]/route.ts b/docs/src/app/llms.mdx/[[...slug]]/route.ts similarity index 91% rename from docs/src/app/llms.mdx/docs/[[...slug]]/route.ts rename to docs/src/app/llms.mdx/[[...slug]]/route.ts index f6f1319..19bdeee 100644 --- a/docs/src/app/llms.mdx/docs/[[...slug]]/route.ts +++ b/docs/src/app/llms.mdx/[[...slug]]/route.ts @@ -5,7 +5,7 @@ export const revalidate = false; export async function GET( _req: Request, - { params }: RouteContext<"/llms.mdx/docs/[[...slug]]">, + { params }: RouteContext<"/llms.mdx/[[...slug]]">, ) { const { slug } = await params; // remove the appended "content.md" diff --git a/docs/src/app/og/docs/[...slug]/route.tsx b/docs/src/app/og/[...slug]/route.tsx similarity index 94% rename from docs/src/app/og/docs/[...slug]/route.tsx rename to docs/src/app/og/[...slug]/route.tsx index 5e951cf..55b43ad 100644 --- a/docs/src/app/og/docs/[...slug]/route.tsx +++ b/docs/src/app/og/[...slug]/route.tsx @@ -8,7 +8,7 @@ export const revalidate = false; export async function GET( _req: Request, - { params }: RouteContext<"/og/docs/[...slug]">, + { params }: RouteContext<"/og/[...slug]">, ) { const { slug } = await params; const page = source.getPage(slug.slice(0, -1)); diff --git a/docs/src/lib/landing-content.tsx b/docs/src/lib/landing-content.tsx index fdb4dc2..4b18c7b 100644 --- a/docs/src/lib/landing-content.tsx +++ b/docs/src/lib/landing-content.tsx @@ -51,28 +51,28 @@ export const DOC_SECTIONS: DocSectionCard[] = [ title: "Guides", description: "Recipes for tasks, queues, workers, retries, workflows, observability, and integrations.", - href: "/docs/guides", + href: "/guides", }, { icon: Layers, title: "Architecture", description: "How the Rust core, scheduler, worker pool, storage, and resource graph fit together.", - href: "/docs/architecture/overview", + href: "/architecture/overview", }, { icon: Code2, title: "API Reference", description: "Queues, tasks, results, contexts, the canvas, workflows, testing helpers, and the CLI.", - href: "/docs/api-reference/overview", + href: "/api-reference/overview", }, { icon: Sparkles, title: "More", description: "Worked examples, the Celery comparison, FAQ, and the per-release changelog.", - href: "/docs/more/examples", + href: "/more/examples", }, ]; @@ -109,11 +109,11 @@ export const HERO: LandingHero = { description: "Rust-powered task queue for Python. Replace Celery without Redis or RabbitMQ. Start with SQLite, scale to Postgres.", primaryCta: { - href: "/docs/getting-started/quickstart", + href: "/getting-started/quickstart", label: "Quickstart", }, secondaryCta: { - href: "/docs/getting-started/installation", + href: "/getting-started/installation", label: "Install", }, ghostCta: { @@ -259,25 +259,25 @@ export const USE_CASES: UseCase[] = [ icon: Database, title: "ETL pipelines", body: "Chain extract → transform → load as a DAG. Fan out across workers, fan in to aggregate, restart from any node on failure.", - href: "/docs/guides/workflows", + href: "/guides/workflows", }, { icon: Mail, title: "Email & notifications", body: "Bursty SMTP, push, or webhook delivery. Per-task rate limits keep providers happy; retries with backoff handle transient failures.", - href: "/docs/guides/reliability/retries", + href: "/guides/reliability/retries", }, { icon: Cpu, title: "ML inference & batch", body: "Long-running model jobs with progress tracking, soft timeouts, and prefork pools for true CPU parallelism without GIL contention.", - href: "/docs/guides/advanced-execution/prefork", + href: "/guides/advanced-execution/prefork", }, { icon: Clock, title: "Scheduled jobs", body: "Six-field cron syntax down to the second. Periodic tasks live in the scheduler — no separate beat daemon to babysit.", - href: "/docs/guides/core/scheduling", + href: "/guides/core/scheduling", }, ]; @@ -314,11 +314,11 @@ export const CTA: LandingCta = { description: "The quickstart walks you through defining a task, enqueuing it, and watching the worker run it — no Redis, no broker, no config.", primary: { - href: "/docs/getting-started/quickstart", + href: "/getting-started/quickstart", label: "Start the quickstart", }, secondary: { - href: "/docs/more/comparison", + href: "/more/comparison", label: "See the full comparison", }, }; diff --git a/docs/src/lib/layout.shared.tsx b/docs/src/lib/layout.shared.tsx index 17381d2..7d4402f 100644 --- a/docs/src/lib/layout.shared.tsx +++ b/docs/src/lib/layout.shared.tsx @@ -4,23 +4,23 @@ import { appName, gitConfig } from "./shared"; const PRIMARY_NAV_LINKS = [ { text: "Getting Started", - url: "/docs/getting-started/installation", + url: "/getting-started/installation", }, { text: "Guides", - url: "/docs/guides", + url: "/guides", }, { text: "Architecture", - url: "/docs/architecture/overview", + url: "/architecture/overview", }, { text: "API", - url: "/docs/api-reference/overview", + url: "/api-reference/overview", }, { text: "Changelog", - url: "/docs/more/changelog", + url: "/more/changelog", }, ]; diff --git a/docs/src/lib/shared.ts b/docs/src/lib/shared.ts index 4d31b6d..2ace48f 100644 --- a/docs/src/lib/shared.ts +++ b/docs/src/lib/shared.ts @@ -1,7 +1,7 @@ export const appName = "Taskito"; -export const docsRoute = "/docs"; -export const docsImageRoute = "/og/docs"; -export const docsContentRoute = "/llms.mdx/docs"; +export const docsRoute = "/"; +export const docsImageRoute = "/og"; +export const docsContentRoute = "/llms.mdx"; export const gitConfig = { user: "ByteVeda",