Relocate the ~6k-file docs tree from the repo root into plugins/document-navigator/docs/ so the plugin is self-contained and portable. docs/superpowers/ (specs and plans) stays at the repo root. Moved via cp+rm rather than git mv because directory rename() fails with EPERM on this WSL /mnt DrvFs mount; git rename-detection pairs the identical-content files at commit time. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.4 KiB
3.4 KiB
Package constants — @suaveplan/rules
Purpose
This module exposes the package-level constants consumed across the rules engine, validators, action executor, and event bus. Constants are deliberately separated from feature code so that one canonical source defines the conservative defaults — depth limits, history capacities, timeout deadlines — for the entire package. Every default is overridable through the options object on the relevant constructor or factory function; the defaults exist for the "I just want it to work" call path, not as a behavioural contract.
PACKAGE_NAME and VERSION are surfaced for diagnostics (error wire format, OTel resource attributes, telemetry headers). They are const literals so that downstream tree-shaking can fold them into the bundle as inline strings.
Features
PACKAGE_NAME— the canonical@suaveplan/rulesidentifier; matches thenamefield inpackage.json.VERSION— synced topackage.json'sversionfield at publish time.DEFAULT_MAX_DEPTH— the recursion depth at which the engine throwsRULES.ENGINE_DEPTH_EXCEEDED. Set conservatively to 32; well above any realistic business-rule tree, but low enough to detect cyclic or pathological inputs quickly.DEFAULT_EVENT_HISTORY— the size of the bounded ring buffer maintained byEventBus. At 1000 entries the bus keeps recent context for debugging without growing without bound under sustained emission.DEFAULT_ACTION_TIMEOUT_MS— the default per-action timeout used byActionExecutorwhen the caller does not supply one. 30s matches the convention used by@suaveplan/retryfor "long-running but bounded" operations.DEFAULT_ACTION_PARALLELISM— the concurrency cap applied byActionExecutor.executeParallelwhen the caller does not supply one. 8 is the sweet spot for IO-bound handlers without saturating an event loop.
Usage: Basic Example
import { DEFAULT_MAX_DEPTH, PACKAGE_NAME, VERSION } from "@suaveplan/rules";
console.log(`${PACKAGE_NAME}@${VERSION}, max-depth=${DEFAULT_MAX_DEPTH}`);
Usage: Advanced Example
import { RuleEngine } from "@suaveplan/rules/engine";
import { DEFAULT_MAX_DEPTH } from "@suaveplan/rules";
// Halve the default depth limit for a constrained edge function.
const engine = new RuleEngine({ maxDepth: DEFAULT_MAX_DEPTH / 2 });
API Reference
| Export | Type | Description |
|---|---|---|
PACKAGE_NAME |
"@suaveplan/rules" (literal const) |
Package identifier. |
VERSION |
"0.1.0" (literal const) |
Current package version; bumped to 1.0.0 at graduation. |
DEFAULT_MAX_DEPTH |
number |
Engine recursion ceiling. |
DEFAULT_EVENT_HISTORY |
number |
EventBus ring-buffer capacity. |
DEFAULT_ACTION_TIMEOUT_MS |
number |
Per-action timeout in milliseconds. |
DEFAULT_ACTION_PARALLELISM |
number |
Maximum concurrent actions in executeParallel. |
Implementation Notes
- The constants file ships zero runtime initialisation and zero
imports of other workspace packages. It is intentionally side-effect free so that tree-shakers can prune it cleanly when unused. - Numbers are declared with
_digit separators (30_000) for readability. The TypeScript target is ES2022, where numeric separators are supported by every published runtime. - Changes to default values are behaviour changes per AGENTS.md §13a and require a
## Migrationnote in the OpenSpec proposal.