diff --git a/.claude_docs/response-protocol.md b/.claude-docs/response-protocol.md similarity index 100% rename from .claude_docs/response-protocol.md rename to .claude-docs/response-protocol.md diff --git a/.claude-docs/strict-typing.md b/.claude-docs/strict-typing.md new file mode 100644 index 0000000..a0b3fb7 --- /dev/null +++ b/.claude-docs/strict-typing.md @@ -0,0 +1,41 @@ +# Strict Typing - NO EXCEPTIONS + +**Claude must ALWAYS use explicit types in ALL code. The use of `any` type is FORBIDDEN.** + +## Rules: +1. **Every variable must have an explicit type annotation** +2. **Every function parameter must be typed** +3. **Every function return value must be typed** +4. **Never use `any`, `dynamic` (in Dart), or equivalent loose types** +5. **Use proper generics, interfaces, and type unions instead** + +## Examples: + +❌ **FORBIDDEN:** +```typescript +const data: any = fetchData(); +function process(input: any): any { ... } +``` + +```dart +dynamic value = getValue(); +void handleData(var data) { ... } +``` + +βœ… **REQUIRED:** +```typescript +const data: UserData = fetchData(); +function process(input: UserInput): ProcessedOutput { ... } +``` + +```dart +UserData value = getValue(); +void handleData(RequestData data) { ... } +``` + +**This rule applies to:** +- TypeScript/JavaScript +- Dart/Flutter +- Python (use type hints) +- All statically-typed languages +- Even when interfacing with external APIs - create proper type definitions diff --git a/claude.md b/claude.md index 4df6b09..7e31aa2 100644 --- a/claude.md +++ b/claude.md @@ -2,138 +2,10 @@ ## Strict Typing - NO EXCEPTIONS -**Claude must ALWAYS use explicit types in ALL code. The use of `any` type is FORBIDDEN.** - -### Rules: -1. **Every variable must have an explicit type annotation** -2. **Every function parameter must be typed** -3. **Every function return value must be typed** -4. **Never use `any`, `dynamic` (in Dart), or equivalent loose types** -5. **Use proper generics, interfaces, and type unions instead** - -### Examples: - -❌ **FORBIDDEN:** -```typescript -const data: any = fetchData(); -function process(input: any): any { ... } -``` - -```dart -dynamic value = getValue(); -void handleData(var data) { ... } -``` - -βœ… **REQUIRED:** -```typescript -const data: UserData = fetchData(); -function process(input: UserInput): ProcessedOutput { ... } -``` - -```dart -UserData value = getValue(); -void handleData(RequestData data) { ... } -``` - -**This rule applies to:** -- TypeScript/JavaScript -- Dart/Flutter -- Python (use type hints) -- All statically-typed languages -- Even when interfacing with external APIs - create proper type definitions +See [.claude-docs/strict-typing.md](.claude-docs/strict-typing.md) for complete typing requirements. --- -## πŸ—£οΈ Response Protocol β€” Defined Answer Types +## πŸ—£οΈ Response Protocol -Claude must **always** end responses with exactly one of these two structured formats: - ---- - -### **Answer Type 1: Binary Choice** -Used for: simple confirmations, proceed/cancel actions, file operations. - -**Format:** - -(Y) Yes β€” [brief action summary] - -(N) No β€” [brief alternative/reason] - -(+) I don't understand β€” ask for clarification - - -**When user selects `(+)`:** -Claude responds: -> "What part would you like me to explain?" -Then teaches the concept step‑by‑step in plain language. - ---- - -### **Answer Type 2: Multiple Choice** -Used for: technical decisions, feature options, configuration paths. - -**Format:** - -(A) Option A β€” [minimalist description] - -(B) Option B β€” [minimalist description] - -(C) Option C β€” [minimalist description] - -(D) Option D β€” [minimalist description] - -(+) I don't understand β€” ask for clarification - - -**When user selects `(+)`:** -Claude responds: -> "Which option would you like explained, or should I clarify what we're deciding here?" -Then provides context on the decision + explains each option's purpose. - ---- - -### ⚠️ Mandatory Rules -1. **No text after the last option** β€” choices must be the final content. -2. Every option description ≀8 words. -3. The `(+)` option is **always present** in both formats. -4. When `(+)` is chosen, Claude shifts to teaching mode before re‑presenting options. -5. Claude must include `(always read claude.md to keep context between interactions)` before every option set. - ---- - -### Example 1 (Binary) - -We need to initialize npm in your project folder. - -(always read claude.md to keep context between interactions) - -(Y) Yes β€” run npm init -y now - -(N) No β€” show me what this does first - -(+) I don't understand β€” explain npm initialization - - -### Example 2 (Multiple Choice) - -Choose your testing framework: - -(always read claude.md to keep context between interactions) - -(A) Jest β€” popular, feature-rich - -(B) Vitest β€” faster, Vite-native - -(C) Node test runner β€” built-in, minimal - -(D) Skip tests β€” add later - -(+) I don't understand β€” explain testing frameworks - - ---- - -**This protocol ensures:** -- You always have an escape hatch to learn. -- Claude never assumes your technical knowledge. -- Every interaction has clear, actionable paths. +See [.claude-docs/response-protocol.md](.claude-docs/response-protocol.md) for complete protocol details.