botlib/PROMPT.md

2.5 KiB

BotLib Development Guide

Version: 6.2.0
Purpose: Shared library for General Bots workspace


ZERO TOLERANCE POLICY

EVERY SINGLE WARNING MUST BE FIXED. NO EXCEPTIONS.


ABSOLUTE PROHIBITIONS

❌ NEVER use #![allow()] or #[allow()] in source code
❌ NEVER use _ prefix for unused variables - DELETE or USE them
❌ NEVER use .unwrap() - use ? or proper error handling
❌ NEVER use .expect() - use ? or proper error handling  
❌ NEVER use panic!() or unreachable!()
❌ NEVER use todo!() or unimplemented!()
❌ NEVER leave unused imports or dead code
❌ NEVER add comments - code must be self-documenting

🏗️ MODULE STRUCTURE

src/
├── lib.rs           # Public exports, feature gates
├── error.rs         # Error types (thiserror)
├── models.rs        # Shared data models
├── message_types.rs # Message type definitions
├── http_client.rs   # HTTP client wrapper (feature-gated)
├── branding.rs      # Version, branding constants
└── version.rs       # Version information

MANDATORY CODE PATTERNS

Error Handling

// ❌ WRONG
let value = something.unwrap();

// ✅ CORRECT
let value = something?;
let value = something.ok_or_else(|| Error::NotFound)?;

Self Usage

impl MyStruct {
    fn new() -> Self { Self { } }  // ✅ Not MyStruct
}

Format Strings

format!("Hello {name}")  // ✅ Not format!("{}", name)

Display vs ToString

// ❌ WRONG
impl ToString for MyType { }

// ✅ CORRECT
impl std::fmt::Display for MyType { }

Derive Eq with PartialEq

#[derive(PartialEq, Eq)]  // ✅ Always both
struct MyStruct { }

📦 KEY DEPENDENCIES

Library Version Purpose
anyhow 1.0 Error handling
thiserror 2.0 Error derive
chrono 0.4 Date/time
serde 1.0 Serialization
uuid 1.11 UUIDs
diesel 2.1 Database ORM
reqwest 0.12 HTTP client

🔑 REMEMBER

  • ZERO WARNINGS - Every clippy warning must be fixed
  • NO ALLOW IN CODE - Never use #[allow()] in source files
  • NO DEAD CODE - Delete unused code
  • NO UNWRAP/EXPECT - Use ? operator
  • INLINE FORMAT ARGS - format!("{name}") not format!("{}", name)
  • USE SELF - In impl blocks, use Self not the type name
  • DERIVE EQ - Always derive Eq with PartialEq
  • DISPLAY NOT TOSTRING - Implement Display, not ToString
  • Version 6.2.0 - do not change without approval