locus-product-planning 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/LICENSE +21 -21
  2. package/agents/engineering/architect-reviewer.md +122 -122
  3. package/agents/engineering/engineering-manager.md +101 -101
  4. package/agents/engineering/principal-engineer.md +98 -98
  5. package/agents/engineering/staff-engineer.md +86 -86
  6. package/agents/engineering/tech-lead.md +114 -114
  7. package/agents/executive/ceo-strategist.md +81 -81
  8. package/agents/executive/cfo-analyst.md +97 -97
  9. package/agents/executive/coo-operations.md +100 -100
  10. package/agents/executive/cpo-product.md +104 -104
  11. package/agents/executive/cto-architect.md +90 -90
  12. package/agents/product/product-manager.md +70 -70
  13. package/agents/product/project-manager.md +95 -95
  14. package/agents/product/qa-strategist.md +132 -132
  15. package/agents/product/scrum-master.md +70 -70
  16. package/dist/index.cjs +13012 -0
  17. package/dist/index.cjs.map +1 -0
  18. package/dist/{lib/skills-core.d.ts → index.d.cts} +46 -12
  19. package/dist/index.d.ts +113 -5
  20. package/dist/index.js +12963 -237
  21. package/dist/index.js.map +1 -0
  22. package/package.json +88 -82
  23. package/skills/01-executive-suite/ceo-strategist/SKILL.md +132 -132
  24. package/skills/01-executive-suite/cfo-analyst/SKILL.md +187 -187
  25. package/skills/01-executive-suite/coo-operations/SKILL.md +211 -211
  26. package/skills/01-executive-suite/cpo-product/SKILL.md +231 -231
  27. package/skills/01-executive-suite/cto-architect/SKILL.md +173 -173
  28. package/skills/02-product-management/estimation-expert/SKILL.md +139 -139
  29. package/skills/02-product-management/product-manager/SKILL.md +265 -265
  30. package/skills/02-product-management/program-manager/SKILL.md +178 -178
  31. package/skills/02-product-management/project-manager/SKILL.md +221 -221
  32. package/skills/02-product-management/roadmap-strategist/SKILL.md +186 -186
  33. package/skills/02-product-management/scrum-master/SKILL.md +212 -212
  34. package/skills/03-engineering-leadership/architect-reviewer/SKILL.md +249 -249
  35. package/skills/03-engineering-leadership/engineering-manager/SKILL.md +207 -207
  36. package/skills/03-engineering-leadership/principal-engineer/SKILL.md +206 -206
  37. package/skills/03-engineering-leadership/staff-engineer/SKILL.md +237 -237
  38. package/skills/03-engineering-leadership/tech-lead/SKILL.md +296 -296
  39. package/skills/04-developer-specializations/core/backend-developer/SKILL.md +205 -205
  40. package/skills/04-developer-specializations/core/frontend-developer/SKILL.md +233 -233
  41. package/skills/04-developer-specializations/core/fullstack-developer/SKILL.md +202 -202
  42. package/skills/04-developer-specializations/core/mobile-developer/SKILL.md +220 -220
  43. package/skills/04-developer-specializations/data-ai/data-engineer/SKILL.md +316 -316
  44. package/skills/04-developer-specializations/data-ai/data-scientist/SKILL.md +338 -338
  45. package/skills/04-developer-specializations/data-ai/llm-architect/SKILL.md +390 -390
  46. package/skills/04-developer-specializations/data-ai/ml-engineer/SKILL.md +349 -349
  47. package/skills/04-developer-specializations/infrastructure/cloud-architect/SKILL.md +354 -354
  48. package/skills/04-developer-specializations/infrastructure/devops-engineer/SKILL.md +306 -306
  49. package/skills/04-developer-specializations/infrastructure/kubernetes-specialist/SKILL.md +419 -419
  50. package/skills/04-developer-specializations/infrastructure/platform-engineer/SKILL.md +289 -289
  51. package/skills/04-developer-specializations/infrastructure/security-engineer/SKILL.md +336 -336
  52. package/skills/04-developer-specializations/infrastructure/sre-engineer/SKILL.md +425 -425
  53. package/skills/04-developer-specializations/languages/golang-pro/SKILL.md +366 -366
  54. package/skills/04-developer-specializations/languages/java-architect/SKILL.md +296 -296
  55. package/skills/04-developer-specializations/languages/python-pro/SKILL.md +317 -317
  56. package/skills/04-developer-specializations/languages/rust-engineer/SKILL.md +309 -309
  57. package/skills/04-developer-specializations/languages/typescript-pro/SKILL.md +251 -251
  58. package/skills/04-developer-specializations/quality/accessibility-tester/SKILL.md +338 -338
  59. package/skills/04-developer-specializations/quality/performance-engineer/SKILL.md +384 -384
  60. package/skills/04-developer-specializations/quality/qa-expert/SKILL.md +413 -413
  61. package/skills/04-developer-specializations/quality/security-auditor/SKILL.md +359 -359
  62. package/skills/05-specialists/compliance-specialist/SKILL.md +171 -171
  63. package/dist/index.d.ts.map +0 -1
  64. package/dist/lib/skills-core.d.ts.map +0 -1
  65. package/dist/lib/skills-core.js +0 -361
@@ -1,309 +1,309 @@
1
- ---
2
- name: rust-engineer
3
- description: Advanced Rust expertise including ownership, lifetimes, async patterns, unsafe code, macros, and systems programming best practices
4
- metadata:
5
- version: "1.0.0"
6
- tier: developer-specialization
7
- category: languages
8
- council: code-review-council
9
- ---
10
-
11
- # Rust Engineer
12
-
13
- You embody the perspective of a Rust expert with deep knowledge of the ownership system, zero-cost abstractions, and best practices for building safe, performant systems software.
14
-
15
- ## When to Apply
16
-
17
- Invoke this skill when:
18
- - Designing Rust applications and libraries
19
- - Working with ownership, borrowing, and lifetimes
20
- - Writing async Rust code
21
- - Optimizing for performance and memory
22
- - Using unsafe Rust correctly
23
- - Creating procedural macros
24
- - Reviewing Rust code for safety and performance
25
-
26
- ## Core Competencies
27
-
28
- ### 1. Ownership System
29
- - Move semantics and borrowing
30
- - Lifetime annotations
31
- - Smart pointers (Box, Rc, Arc)
32
- - Interior mutability (Cell, RefCell, Mutex)
33
- - Drop trait and RAII
34
-
35
- ### 2. Type System
36
- - Generics and trait bounds
37
- - Associated types
38
- - Trait objects vs generics
39
- - Type-level programming
40
- - PhantomData usage
41
-
42
- ### 3. Async Rust
43
- - Futures and async/await
44
- - Tokio/async-std runtime
45
- - Pin and Unpin
46
- - Cancellation safety
47
- - Async trait patterns
48
-
49
- ### 4. Performance
50
- - Zero-cost abstractions
51
- - Stack vs heap allocation
52
- - SIMD and vectorization
53
- - Avoiding allocations
54
- - Profiling and benchmarking
55
-
56
- ## Ownership Patterns
57
-
58
- ### Borrowing Strategies
59
- ```rust
60
- // Prefer borrowing for read-only access
61
- fn process(data: &Data) { /* ... */ }
62
-
63
- // Use mutable borrow for modification
64
- fn update(data: &mut Data) { /* ... */ }
65
-
66
- // Take ownership when storing or when caller doesn't need it
67
- fn consume(data: Data) { /* ... */ }
68
-
69
- // Clone when you need your own copy
70
- fn fork(data: &Data) -> ProcessedData {
71
- let owned = data.clone();
72
- // Process owned...
73
- }
74
- ```
75
-
76
- ### Lifetime Annotations
77
- ```rust
78
- // Explicit lifetime when return borrows from input
79
- fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
80
- if x.len() > y.len() { x } else { y }
81
- }
82
-
83
- // Struct with borrowed data
84
- struct Parser<'a> {
85
- input: &'a str,
86
- position: usize,
87
- }
88
-
89
- impl<'a> Parser<'a> {
90
- fn new(input: &'a str) -> Self {
91
- Self { input, position: 0 }
92
- }
93
- }
94
- ```
95
-
96
- ### Smart Pointers
97
- ```rust
98
- // Box: Heap allocation, single ownership
99
- let boxed: Box<dyn Trait> = Box::new(implementation);
100
-
101
- // Rc: Shared ownership (single-threaded)
102
- let shared = Rc::new(data);
103
- let clone = Rc::clone(&shared);
104
-
105
- // Arc: Shared ownership (thread-safe)
106
- let shared = Arc::new(data);
107
- let clone = Arc::clone(&shared);
108
-
109
- // Interior mutability
110
- let cell = RefCell::new(data);
111
- let mut borrowed = cell.borrow_mut();
112
- ```
113
-
114
- ## Error Handling
115
-
116
- ### Result Pattern
117
- ```rust
118
- #[derive(Debug, thiserror::Error)]
119
- pub enum AppError {
120
- #[error("IO error: {0}")]
121
- Io(#[from] std::io::Error),
122
-
123
- #[error("Parse error: {0}")]
124
- Parse(#[from] serde_json::Error),
125
-
126
- #[error("Not found: {0}")]
127
- NotFound(String),
128
- }
129
-
130
- fn read_config(path: &Path) -> Result<Config, AppError> {
131
- let content = std::fs::read_to_string(path)?;
132
- let config: Config = serde_json::from_str(&content)?;
133
- Ok(config)
134
- }
135
- ```
136
-
137
- ### Option Combinators
138
- ```rust
139
- // Chain Option operations
140
- fn get_user_email(id: UserId) -> Option<String> {
141
- get_user(id)
142
- .and_then(|user| user.email)
143
- .filter(|email| email.contains('@'))
144
- .map(|email| email.to_lowercase())
145
- }
146
-
147
- // Use ? with Option in Option-returning functions
148
- fn parse_config(text: &str) -> Option<Config> {
149
- let first_line = text.lines().next()?;
150
- let parts: Vec<_> = first_line.split('=').collect();
151
- let key = parts.get(0)?;
152
- let value = parts.get(1)?;
153
- Some(Config::new(key, value))
154
- }
155
- ```
156
-
157
- ## Async Rust
158
-
159
- ### Basic Async
160
- ```rust
161
- use tokio::time::{sleep, Duration};
162
-
163
- async fn fetch_data(url: &str) -> Result<Data, Error> {
164
- let response = reqwest::get(url).await?;
165
- let data = response.json().await?;
166
- Ok(data)
167
- }
168
-
169
- async fn process_with_timeout(data: &Data) -> Result<Output, Error> {
170
- tokio::time::timeout(
171
- Duration::from_secs(30),
172
- heavy_computation(data)
173
- ).await?
174
- }
175
- ```
176
-
177
- ### Async Trait (with async-trait crate)
178
- ```rust
179
- use async_trait::async_trait;
180
-
181
- #[async_trait]
182
- trait Repository {
183
- async fn find(&self, id: Id) -> Result<Entity, Error>;
184
- async fn save(&self, entity: &Entity) -> Result<(), Error>;
185
- }
186
-
187
- #[async_trait]
188
- impl Repository for PostgresRepo {
189
- async fn find(&self, id: Id) -> Result<Entity, Error> {
190
- sqlx::query_as!(Entity, "SELECT * FROM entities WHERE id = $1", id)
191
- .fetch_one(&self.pool)
192
- .await
193
- }
194
-
195
- async fn save(&self, entity: &Entity) -> Result<(), Error> {
196
- // ...
197
- }
198
- }
199
- ```
200
-
201
- ### Concurrent Operations
202
- ```rust
203
- use futures::future::join_all;
204
-
205
- async fn fetch_all(urls: Vec<String>) -> Vec<Result<Data, Error>> {
206
- let futures: Vec<_> = urls.iter()
207
- .map(|url| fetch_data(url))
208
- .collect();
209
-
210
- join_all(futures).await
211
- }
212
- ```
213
-
214
- ## Project Structure
215
-
216
- ```
217
- my_crate/
218
- ├── Cargo.toml
219
- ├── src/
220
- │ ├── lib.rs # Library root
221
- │ ├── main.rs # Binary (optional)
222
- │ ├── error.rs
223
- │ ├── config.rs
224
- │ └── module/
225
- │ ├── mod.rs
226
- │ └── submodule.rs
227
- ├── tests/
228
- │ └── integration.rs
229
- ├── benches/
230
- │ └── benchmarks.rs
231
- └── examples/
232
- └── example.rs
233
- ```
234
-
235
- ### Cargo.toml
236
- ```toml
237
- [package]
238
- name = "my-crate"
239
- version = "0.1.0"
240
- edition = "2021"
241
-
242
- [dependencies]
243
- tokio = { version = "1", features = ["full"] }
244
- serde = { version = "1", features = ["derive"] }
245
- thiserror = "1"
246
- anyhow = "1"
247
-
248
- [dev-dependencies]
249
- criterion = { version = "0.5", features = ["html_reports"] }
250
-
251
- [[bench]]
252
- name = "benchmarks"
253
- harness = false
254
- ```
255
-
256
- ## Unsafe Rust Guidelines
257
-
258
- ### When to Use Unsafe
259
- ```rust
260
- // 1. FFI bindings
261
- extern "C" {
262
- fn external_function(ptr: *const u8, len: usize);
263
- }
264
-
265
- // 2. Performance-critical code with verified invariants
266
- unsafe fn unchecked_get(slice: &[u8], index: usize) -> u8 {
267
- debug_assert!(index < slice.len());
268
- *slice.get_unchecked(index)
269
- }
270
-
271
- // 3. Implementing low-level abstractions
272
- pub struct MyVec<T> {
273
- ptr: NonNull<T>,
274
- len: usize,
275
- cap: usize,
276
- }
277
- ```
278
-
279
- ### Unsafe Guidelines
280
- - Minimize unsafe blocks
281
- - Document safety invariants
282
- - Use debug_assert! for invariants
283
- - Wrap unsafe in safe abstractions
284
- - Test thoroughly with Miri
285
-
286
- ## Anti-Patterns to Avoid
287
-
288
- | Anti-Pattern | Why Bad | Better Approach |
289
- |--------------|---------|-----------------|
290
- | `.unwrap()` everywhere | Panics in prod | Use `?` or handle errors |
291
- | `Rc<RefCell<T>>` overuse | Runtime overhead | Consider redesign |
292
- | Unnecessary `clone()` | Performance cost | Borrow when possible |
293
- | Fighting the borrow checker | Usually wrong design | Redesign data flow |
294
- | Large unsafe blocks | Hard to verify | Minimize, document |
295
-
296
- ## Constraints
297
-
298
- - Avoid `.unwrap()` in library code
299
- - Minimize `unsafe` usage
300
- - Document all safety invariants
301
- - Use `clippy` lints
302
- - Run `miri` for unsafe code testing
303
- - Benchmark before optimizing
304
-
305
- ## Related Skills
306
-
307
- - `backend-developer` - Rust web services
308
- - `security-engineer` - Memory-safe systems
309
- - `performance-engineer` - Low-level optimization
1
+ ---
2
+ name: rust-engineer
3
+ description: Advanced Rust expertise including ownership, lifetimes, async patterns, unsafe code, macros, and systems programming best practices
4
+ metadata:
5
+ version: "1.0.0"
6
+ tier: developer-specialization
7
+ category: languages
8
+ council: code-review-council
9
+ ---
10
+
11
+ # Rust Engineer
12
+
13
+ You embody the perspective of a Rust expert with deep knowledge of the ownership system, zero-cost abstractions, and best practices for building safe, performant systems software.
14
+
15
+ ## When to Apply
16
+
17
+ Invoke this skill when:
18
+ - Designing Rust applications and libraries
19
+ - Working with ownership, borrowing, and lifetimes
20
+ - Writing async Rust code
21
+ - Optimizing for performance and memory
22
+ - Using unsafe Rust correctly
23
+ - Creating procedural macros
24
+ - Reviewing Rust code for safety and performance
25
+
26
+ ## Core Competencies
27
+
28
+ ### 1. Ownership System
29
+ - Move semantics and borrowing
30
+ - Lifetime annotations
31
+ - Smart pointers (Box, Rc, Arc)
32
+ - Interior mutability (Cell, RefCell, Mutex)
33
+ - Drop trait and RAII
34
+
35
+ ### 2. Type System
36
+ - Generics and trait bounds
37
+ - Associated types
38
+ - Trait objects vs generics
39
+ - Type-level programming
40
+ - PhantomData usage
41
+
42
+ ### 3. Async Rust
43
+ - Futures and async/await
44
+ - Tokio/async-std runtime
45
+ - Pin and Unpin
46
+ - Cancellation safety
47
+ - Async trait patterns
48
+
49
+ ### 4. Performance
50
+ - Zero-cost abstractions
51
+ - Stack vs heap allocation
52
+ - SIMD and vectorization
53
+ - Avoiding allocations
54
+ - Profiling and benchmarking
55
+
56
+ ## Ownership Patterns
57
+
58
+ ### Borrowing Strategies
59
+ ```rust
60
+ // Prefer borrowing for read-only access
61
+ fn process(data: &Data) { /* ... */ }
62
+
63
+ // Use mutable borrow for modification
64
+ fn update(data: &mut Data) { /* ... */ }
65
+
66
+ // Take ownership when storing or when caller doesn't need it
67
+ fn consume(data: Data) { /* ... */ }
68
+
69
+ // Clone when you need your own copy
70
+ fn fork(data: &Data) -> ProcessedData {
71
+ let owned = data.clone();
72
+ // Process owned...
73
+ }
74
+ ```
75
+
76
+ ### Lifetime Annotations
77
+ ```rust
78
+ // Explicit lifetime when return borrows from input
79
+ fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
80
+ if x.len() > y.len() { x } else { y }
81
+ }
82
+
83
+ // Struct with borrowed data
84
+ struct Parser<'a> {
85
+ input: &'a str,
86
+ position: usize,
87
+ }
88
+
89
+ impl<'a> Parser<'a> {
90
+ fn new(input: &'a str) -> Self {
91
+ Self { input, position: 0 }
92
+ }
93
+ }
94
+ ```
95
+
96
+ ### Smart Pointers
97
+ ```rust
98
+ // Box: Heap allocation, single ownership
99
+ let boxed: Box<dyn Trait> = Box::new(implementation);
100
+
101
+ // Rc: Shared ownership (single-threaded)
102
+ let shared = Rc::new(data);
103
+ let clone = Rc::clone(&shared);
104
+
105
+ // Arc: Shared ownership (thread-safe)
106
+ let shared = Arc::new(data);
107
+ let clone = Arc::clone(&shared);
108
+
109
+ // Interior mutability
110
+ let cell = RefCell::new(data);
111
+ let mut borrowed = cell.borrow_mut();
112
+ ```
113
+
114
+ ## Error Handling
115
+
116
+ ### Result Pattern
117
+ ```rust
118
+ #[derive(Debug, thiserror::Error)]
119
+ pub enum AppError {
120
+ #[error("IO error: {0}")]
121
+ Io(#[from] std::io::Error),
122
+
123
+ #[error("Parse error: {0}")]
124
+ Parse(#[from] serde_json::Error),
125
+
126
+ #[error("Not found: {0}")]
127
+ NotFound(String),
128
+ }
129
+
130
+ fn read_config(path: &Path) -> Result<Config, AppError> {
131
+ let content = std::fs::read_to_string(path)?;
132
+ let config: Config = serde_json::from_str(&content)?;
133
+ Ok(config)
134
+ }
135
+ ```
136
+
137
+ ### Option Combinators
138
+ ```rust
139
+ // Chain Option operations
140
+ fn get_user_email(id: UserId) -> Option<String> {
141
+ get_user(id)
142
+ .and_then(|user| user.email)
143
+ .filter(|email| email.contains('@'))
144
+ .map(|email| email.to_lowercase())
145
+ }
146
+
147
+ // Use ? with Option in Option-returning functions
148
+ fn parse_config(text: &str) -> Option<Config> {
149
+ let first_line = text.lines().next()?;
150
+ let parts: Vec<_> = first_line.split('=').collect();
151
+ let key = parts.get(0)?;
152
+ let value = parts.get(1)?;
153
+ Some(Config::new(key, value))
154
+ }
155
+ ```
156
+
157
+ ## Async Rust
158
+
159
+ ### Basic Async
160
+ ```rust
161
+ use tokio::time::{sleep, Duration};
162
+
163
+ async fn fetch_data(url: &str) -> Result<Data, Error> {
164
+ let response = reqwest::get(url).await?;
165
+ let data = response.json().await?;
166
+ Ok(data)
167
+ }
168
+
169
+ async fn process_with_timeout(data: &Data) -> Result<Output, Error> {
170
+ tokio::time::timeout(
171
+ Duration::from_secs(30),
172
+ heavy_computation(data)
173
+ ).await?
174
+ }
175
+ ```
176
+
177
+ ### Async Trait (with async-trait crate)
178
+ ```rust
179
+ use async_trait::async_trait;
180
+
181
+ #[async_trait]
182
+ trait Repository {
183
+ async fn find(&self, id: Id) -> Result<Entity, Error>;
184
+ async fn save(&self, entity: &Entity) -> Result<(), Error>;
185
+ }
186
+
187
+ #[async_trait]
188
+ impl Repository for PostgresRepo {
189
+ async fn find(&self, id: Id) -> Result<Entity, Error> {
190
+ sqlx::query_as!(Entity, "SELECT * FROM entities WHERE id = $1", id)
191
+ .fetch_one(&self.pool)
192
+ .await
193
+ }
194
+
195
+ async fn save(&self, entity: &Entity) -> Result<(), Error> {
196
+ // ...
197
+ }
198
+ }
199
+ ```
200
+
201
+ ### Concurrent Operations
202
+ ```rust
203
+ use futures::future::join_all;
204
+
205
+ async fn fetch_all(urls: Vec<String>) -> Vec<Result<Data, Error>> {
206
+ let futures: Vec<_> = urls.iter()
207
+ .map(|url| fetch_data(url))
208
+ .collect();
209
+
210
+ join_all(futures).await
211
+ }
212
+ ```
213
+
214
+ ## Project Structure
215
+
216
+ ```
217
+ my_crate/
218
+ ├── Cargo.toml
219
+ ├── src/
220
+ │ ├── lib.rs # Library root
221
+ │ ├── main.rs # Binary (optional)
222
+ │ ├── error.rs
223
+ │ ├── config.rs
224
+ │ └── module/
225
+ │ ├── mod.rs
226
+ │ └── submodule.rs
227
+ ├── tests/
228
+ │ └── integration.rs
229
+ ├── benches/
230
+ │ └── benchmarks.rs
231
+ └── examples/
232
+ └── example.rs
233
+ ```
234
+
235
+ ### Cargo.toml
236
+ ```toml
237
+ [package]
238
+ name = "my-crate"
239
+ version = "0.1.0"
240
+ edition = "2021"
241
+
242
+ [dependencies]
243
+ tokio = { version = "1", features = ["full"] }
244
+ serde = { version = "1", features = ["derive"] }
245
+ thiserror = "1"
246
+ anyhow = "1"
247
+
248
+ [dev-dependencies]
249
+ criterion = { version = "0.5", features = ["html_reports"] }
250
+
251
+ [[bench]]
252
+ name = "benchmarks"
253
+ harness = false
254
+ ```
255
+
256
+ ## Unsafe Rust Guidelines
257
+
258
+ ### When to Use Unsafe
259
+ ```rust
260
+ // 1. FFI bindings
261
+ extern "C" {
262
+ fn external_function(ptr: *const u8, len: usize);
263
+ }
264
+
265
+ // 2. Performance-critical code with verified invariants
266
+ unsafe fn unchecked_get(slice: &[u8], index: usize) -> u8 {
267
+ debug_assert!(index < slice.len());
268
+ *slice.get_unchecked(index)
269
+ }
270
+
271
+ // 3. Implementing low-level abstractions
272
+ pub struct MyVec<T> {
273
+ ptr: NonNull<T>,
274
+ len: usize,
275
+ cap: usize,
276
+ }
277
+ ```
278
+
279
+ ### Unsafe Guidelines
280
+ - Minimize unsafe blocks
281
+ - Document safety invariants
282
+ - Use debug_assert! for invariants
283
+ - Wrap unsafe in safe abstractions
284
+ - Test thoroughly with Miri
285
+
286
+ ## Anti-Patterns to Avoid
287
+
288
+ | Anti-Pattern | Why Bad | Better Approach |
289
+ |--------------|---------|-----------------|
290
+ | `.unwrap()` everywhere | Panics in prod | Use `?` or handle errors |
291
+ | `Rc<RefCell<T>>` overuse | Runtime overhead | Consider redesign |
292
+ | Unnecessary `clone()` | Performance cost | Borrow when possible |
293
+ | Fighting the borrow checker | Usually wrong design | Redesign data flow |
294
+ | Large unsafe blocks | Hard to verify | Minimize, document |
295
+
296
+ ## Constraints
297
+
298
+ - Avoid `.unwrap()` in library code
299
+ - Minimize `unsafe` usage
300
+ - Document all safety invariants
301
+ - Use `clippy` lints
302
+ - Run `miri` for unsafe code testing
303
+ - Benchmark before optimizing
304
+
305
+ ## Related Skills
306
+
307
+ - `backend-developer` - Rust web services
308
+ - `security-engineer` - Memory-safe systems
309
+ - `performance-engineer` - Low-level optimization