.cursor/skills/global/SKILL.md
--- name: podverse-global-patterns version: 1.1.0 --- # Global Patterns ## Dependencies Tier 1 → Tier 2 → ... → Tier 5. Only depend on lower tiers. ## Workspace Deps ```json { "dependencies": { "@podverse/helpers": "workspace:*", "@podverse/helpers-validation": "workspace:*", "@podverse/helpers-requests": "workspace:*" } } ``` **Helper packages available:** - `@podverse/helpers` - Core utilities, types, DTOs - `@podverse/helpers-validation` - Validation utilities - `@podve
npx skillsauth add podverse/podverse podverse-global-patternsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Tier 1 → Tier 2 → ... → Tier 5. Only depend on lower tiers.
{
"dependencies": {
"@podverse/helpers": "workspace:*",
"@podverse/helpers-validation": "workspace:*",
"@podverse/helpers-requests": "workspace:*"
}
}
Helper packages available:
@podverse/helpers - Core utilities, types, DTOs@podverse/helpers-validation - Validation utilities@podverse/helpers-requests - API request utilities@podverse/helpers-backend - Backend utilities@podverse/helpers-browser - Browser utilities@podverse/helpers-config - Config validation{ "extends": "../../tsconfig.base.json" }
Avoid type assertions (as) when a better approach exists (types, narrowing, type guards).
packages/name/
├── src/index.ts
├── package.json
└── tsconfig.json
Critical: Plans go in .llm/plans/ directory, NOT .cursor/plans/.
The .cursor/ directory is for IDE-specific config only (rules, skills, settings).
300 line limit. Split large plans:
feature/
├── 00-master-plan.md # Index: master plan overview
├── 01-part1.md # Sequential implementation plans
└── 02-part2.md
Plan index files: Use 00-master-plan.md (primary) or 00-overview.md (alternative).
Never use README.md or full-path names.
Plans organized by status:
.llm/plans/
├── active/
│ └── feature-xyz/
├── completed/
│ └── feature-abc/
└── README.md
When you finish executing a plan in active/, automatically move it to completed/ (do not
ask). If it's the last plan in its set (execution order, copy-pasta, or feature directory), move
the whole set. See Plan Completion for full behavior.
When a phase has multiple sub-plans (e.g., 04a, 04b, 04c...), group them in a subdirectory:
completed/
└── monorepo-migration/
├── 01-infrastructure/ # Group of 01a, 01b, 01c...
│ ├── 01a-configs.md
│ ├── 01b-git-hooks.md
│ └── index.md # Parent outline
├── 03-apps/ # Group of 03a, 03b...
└── 04-infra-tooling/ # Group of 04a, 04b...
Pattern: NN-descriptive-name/ containing NNx-*.md files.
When giving terminal or npm commands, always give them relative to the monorepo root. Do not instruct "cd apps/workers" (or similar) first. Use npm run <script> -w apps/<workspace> -- [args] so the user can copy-paste from repo root. Always put runnable commands in a fenced code block (e.g. bash ... ) so the IDE shows a copy button; never give only inline commands when the user may want to run them. See .cursor/rules/commands-from-monorepo-root.mdc.
Issue Templates & Labels: docs/repo-management/GITHUB-LABELS.md
The repository uses 23 carefully curated labels and 5 issue templates. When creating issues or discussing GitHub workflows, refer to the label documentation.
Available issue templates:
bug labelenhancement labeltechnical-improvement labelinfra labeldocs labelBEFORE executing any plan, assess complexity. If ANY threshold exceeded, STOP and recommend breaking down the work.
⚠️ This plan exceeds complexity thresholds:
- 6 packages to modify (threshold: 3)
- Chained dependencies: helpers → external-services → orm → ...
Recommended breakdown:
1. helpers (standalone)
2. external-services (depends on helpers)
3. orm (depends on helpers)
...
Shall I proceed with just "helpers" first?
.js extensions in relative paths. Packages and apps use NodeNext (ESM).import type whenever the import is used only as a type (e.g. type annotations, generics). Use value imports when the symbol is used at runtime (e.g. classes for instanceof, decorators that need the constructor).@podverse/*) → relative → styles last. Enforced by ESLint; fix with npm run lint:fix.undefined explicitly to components. Allow null as a value for optional props so callers can pass prop={value} directly; components treat null (and undefined) as "not set" / default behavior. When checking optional string props (e.g. error messages) for "has value", use a simple falsy check (Boolean(value) or if (value)) instead of explicit !== undefined && !== null && !== ''.Treat warnings as errors. Fix all lint warnings before considering a task complete:
!) → Use ?? with defaults or proper null checksconsole.warn/console.error, or add file-level /* eslint-disable no-console */ with justification comment_ or removeOnly use eslint-disable when:
Critical: 10-Session Maximum Per File
Each history file is limited to 10 sessions maximum. When adding session 11, split the file first.
See LLM History Skill for complete guidelines.
Capture prompts when:
Log the prompt at the START of your response, before any tool calls. Then at end: Add files changed and key decisions. Skip for pure Q&A conversations.
Always count sessions first:
### Session headersThe auto-reminder rule (.cursor/rules/llm-history-tracking.mdc) is glob-based.
It may NOT trigger when working on:
docs/*.md).cursorrules, etc.)Always check: Did I update the history? If unsure, update it.
After any substantive work, confirm:
✅ History updated: .llm/history/active/[feature]/[feature].md (Session N)
Or for multi-part features:
✅ History updated: .llm/history/active/[feature]/[feature]-part-NN.md (Session N)
apps/web/)apps/api/)packages/orm/)documentation
Per-job env validation and config patterns for the workers app. Use when adding or changing worker commands, touching workers startup validation, or documenting worker env vars.
development
Common patterns and examples for the podverse-web Next.js application
tools
Ensures client-side time displays use formatDateTimeAbbrev for localized, readable timestamps. Use when rendering dates/times in the UI or when the user mentions time formatting or local timezone display.
testing
--- name: podverse-testing-policy description: Skip test implementation unless the user explicitly asks. Use when a plan or task includes adding unit tests, a test phase, or "Phase 3: Tests". version: 1.0.0 --- # Testing policy — skip tests for now ## When to use - When a plan or task includes adding unit tests, a test phase, or "Phase 3: Tests". - When deciding whether to implement tests for a feature. ## Rules 1. **We are not concerning ourselves with tests at this time.** Skip test imp