Add: windows mvp - transparent bugs not fixed
This commit is contained in:
112
AGENTS.md
Normal file
112
AGENTS.md
Normal file
@@ -0,0 +1,112 @@
|
||||
# Rust Skills - Agent Instructions
|
||||
|
||||
> For OpenAI Codex and compatible agents
|
||||
|
||||
## Default Project Settings
|
||||
|
||||
When creating Rust projects or Cargo.toml files, ALWAYS use:
|
||||
|
||||
```toml
|
||||
[package]
|
||||
edition = "2024"
|
||||
rust-version = "1.85"
|
||||
|
||||
[lints.rust]
|
||||
unsafe_code = "warn"
|
||||
|
||||
[lints.clippy]
|
||||
all = "warn"
|
||||
pedantic = "warn"
|
||||
```
|
||||
|
||||
## Core Capabilities
|
||||
|
||||
### 1. Question Routing
|
||||
Route Rust questions to appropriate skills:
|
||||
- Ownership/borrowing → m01-ownership
|
||||
- Smart pointers → m02-resource
|
||||
- Error handling → m06-error-handling
|
||||
- Concurrency → m07-concurrency
|
||||
- Unsafe code → unsafe-checker
|
||||
|
||||
### 2. Code Style
|
||||
Follow Rust coding guidelines:
|
||||
- Use snake_case for variables and functions
|
||||
- Use PascalCase for types and traits
|
||||
- Use SCREAMING_SNAKE_CASE for constants
|
||||
- Max line length: 100 characters
|
||||
- Use `?` operator instead of `unwrap()` in library code
|
||||
|
||||
### 3. Error Handling
|
||||
```rust
|
||||
// Good: Use Result with context
|
||||
fn read_config() -> Result<Config, ConfigError> {
|
||||
let content = std::fs::read_to_string("config.toml")
|
||||
.map_err(|e| ConfigError::Io(e))?;
|
||||
toml::from_str(&content)
|
||||
.map_err(|e| ConfigError::Parse(e))
|
||||
}
|
||||
|
||||
// Avoid: unwrap() in library code
|
||||
fn read_config() -> Config {
|
||||
let content = std::fs::read_to_string("config.toml").unwrap(); // Bad
|
||||
toml::from_str(&content).unwrap() // Bad
|
||||
}
|
||||
```
|
||||
|
||||
### 4. Unsafe Code
|
||||
Every `unsafe` block MUST have a `// SAFETY:` comment:
|
||||
```rust
|
||||
// SAFETY: We checked that index < len above, so this is in bounds
|
||||
unsafe { slice.get_unchecked(index) }
|
||||
```
|
||||
|
||||
### 5. Common Error Fixes
|
||||
|
||||
| Error | Cause | Fix |
|
||||
|-------|-------|-----|
|
||||
| E0382 | Use of moved value | Clone, borrow, or use reference |
|
||||
| E0597 | Lifetime too short | Extend lifetime or restructure |
|
||||
| E0502 | Borrow conflict | Split borrows or use RefCell |
|
||||
| E0499 | Multiple mut borrows | Restructure to single mut borrow |
|
||||
| E0277 | Missing trait impl | Add trait bound or implement trait |
|
||||
|
||||
## Quick Reference
|
||||
|
||||
### Ownership
|
||||
- Each value has one owner
|
||||
- Borrowing: `&T` (shared) or `&mut T` (exclusive)
|
||||
- Lifetimes: `'a` annotations for references
|
||||
|
||||
### Smart Pointers
|
||||
- `Box<T>`: Heap allocation
|
||||
- `Rc<T>`: Reference counting (single-threaded)
|
||||
- `Arc<T>`: Atomic reference counting (thread-safe)
|
||||
- `RefCell<T>`: Interior mutability
|
||||
|
||||
### Concurrency
|
||||
- `Send`: Safe to transfer between threads
|
||||
- `Sync`: Safe to share references between threads
|
||||
- `Mutex<T>`: Mutual exclusion
|
||||
- `RwLock<T>`: Reader-writer lock
|
||||
|
||||
### Async
|
||||
```rust
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
let handle = tokio::spawn(async {
|
||||
// async work
|
||||
});
|
||||
handle.await.unwrap();
|
||||
}
|
||||
```
|
||||
|
||||
## Skill Files
|
||||
|
||||
For detailed guidance, see:
|
||||
- `skills/rust-router/SKILL.md` - Question routing
|
||||
- `skills/coding-guidelines/SKILL.md` - Code style rules
|
||||
- `skills/unsafe-checker/SKILL.md` - Unsafe code review
|
||||
- `skills/m01-ownership/SKILL.md` - Ownership concepts
|
||||
- `skills/m06-error-handling/SKILL.md` - Error patterns
|
||||
- `skills/m07-concurrency/SKILL.md` - Concurrency patterns
|
||||
Reference in New Issue
Block a user