updates
This commit is contained in:
61
agents/atlas/life/projects/audiobook-pipeline/summary.md
Normal file
61
agents/atlas/life/projects/audiobook-pipeline/summary.md
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
# AudiobookPipeline Project
|
||||||
|
|
||||||
|
**Status:** Active
|
||||||
|
**Role:** Founding Engineer
|
||||||
|
**Company:** FrenoCorp
|
||||||
|
|
||||||
|
## Current State
|
||||||
|
|
||||||
|
MVP pipeline development in progress. Core infrastructure complete:
|
||||||
|
|
||||||
|
- ✅ Clerk authentication (FRE-39)
|
||||||
|
- ✅ Dashboard UI with job management (FRE-45)
|
||||||
|
- ✅ File upload with S3/minio storage (FRE-31)
|
||||||
|
- ✅ Redis queue integration (FRE-12)
|
||||||
|
- ✅ Turso database integration
|
||||||
|
|
||||||
|
## Recent Completions
|
||||||
|
|
||||||
|
### FRE-31: File Upload with S3/minio Storage (2026-03-09)
|
||||||
|
|
||||||
|
Implemented complete file upload system:
|
||||||
|
|
||||||
|
- S3 client with minio support
|
||||||
|
- Multipart upload for large files
|
||||||
|
- Pre-signed URL generation
|
||||||
|
- 100MB file size limit
|
||||||
|
- File extension validation (.epub, .pdf, .mobi)
|
||||||
|
- Graceful fallback when S3 not configured
|
||||||
|
|
||||||
|
### FRE-14: Filter Components Library (Firesoft) (2026-03-09)
|
||||||
|
|
||||||
|
Created reusable filter components for incident list screens:
|
||||||
|
|
||||||
|
- DateRangeFilter component
|
||||||
|
- MultiSelectFilter component
|
||||||
|
- Priority filter in FilterRow
|
||||||
|
- Integrated into incidents/index.tsx
|
||||||
|
|
||||||
|
## In Progress
|
||||||
|
|
||||||
|
None - awaiting prioritization from board.
|
||||||
|
|
||||||
|
## Backlog (Assigned to Atlas)
|
||||||
|
|
||||||
|
- FRE-16: Optimize Batch Processing (low priority)
|
||||||
|
- FRE-17: Add Progress Tracking to Job Processor
|
||||||
|
- FRE-21: Implement Worker Auto-scaling
|
||||||
|
- FRE-22: Add Integration Tests for API Endpoints
|
||||||
|
- FRE-23: Set Up CI/CD Pipeline
|
||||||
|
- FRE-27: Add Comprehensive Logging and Monitoring
|
||||||
|
- FRE-28: Optimize Database Queries
|
||||||
|
- FRE-29: Implement Caching Layer
|
||||||
|
|
||||||
|
## Blockers
|
||||||
|
|
||||||
|
- Paperclip API authentication unavailable - using local file-based task management
|
||||||
|
- FRE-33 (CTO permissions) blocked - affects company-wide coordination
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
Working independently with local task files due to Paperclip API auth issues. All completed work documented in daily notes and PARA memory.
|
||||||
54
agents/atlas/life/projects/fre-31-file-upload/items.yaml
Normal file
54
agents/atlas/life/projects/fre-31-file-upload/items.yaml
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# Atomic facts for FRE-31
|
||||||
|
|
||||||
|
- {
|
||||||
|
type: task,
|
||||||
|
id: FRE-31,
|
||||||
|
title: "Implement File Upload with S3/minio Storage",
|
||||||
|
status: done,
|
||||||
|
completed_on: "2026-03-09",
|
||||||
|
assignee: Atlas,
|
||||||
|
priority: high,
|
||||||
|
}
|
||||||
|
- {
|
||||||
|
type: feature,
|
||||||
|
name: file_upload,
|
||||||
|
storage_backend: s3_minio,
|
||||||
|
fallback: in_memory_mock,
|
||||||
|
}
|
||||||
|
- {
|
||||||
|
type: constraint,
|
||||||
|
name: max_file_size,
|
||||||
|
value: 104857600,
|
||||||
|
unit: bytes,
|
||||||
|
display: "100MB",
|
||||||
|
}
|
||||||
|
- {
|
||||||
|
type: constraint,
|
||||||
|
name: allowed_extensions,
|
||||||
|
values: [".epub", ".pdf", ".mobi"],
|
||||||
|
}
|
||||||
|
- { type: package, name: "@aws-sdk/client-s3", version: "^3.1004.0" }
|
||||||
|
- { type: package, name: "@aws-sdk/lib-storage", version: "^3.1004.0" }
|
||||||
|
- { type: package, name: "@aws-sdk/s3-request-presigner", version: "^3.1004.0" }
|
||||||
|
- {
|
||||||
|
type: endpoint,
|
||||||
|
path: "/api/jobs",
|
||||||
|
method: POST,
|
||||||
|
handles: ["multipart/form-data", "application/json"],
|
||||||
|
}
|
||||||
|
- {
|
||||||
|
type: module,
|
||||||
|
path: "/home/mike/code/AudiobookPipeline/web/src/server/storage.js",
|
||||||
|
functions:
|
||||||
|
[
|
||||||
|
uploadFile,
|
||||||
|
getFileUrl,
|
||||||
|
deleteFile,
|
||||||
|
getUploadUrl,
|
||||||
|
initiateMultipartUpload,
|
||||||
|
uploadPart,
|
||||||
|
completeMultipartUpload,
|
||||||
|
abortMultipartUpload,
|
||||||
|
storeFileMetadata,
|
||||||
|
],
|
||||||
|
}
|
||||||
67
agents/atlas/life/projects/fre-31-file-upload/summary.md
Normal file
67
agents/atlas/life/projects/fre-31-file-upload/summary.md
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
# FRE-31: Implement File Upload with S3/minio Storage
|
||||||
|
|
||||||
|
**Status:** Done
|
||||||
|
**Completed:** 2026-03-09
|
||||||
|
**Owner:** Atlas (Founding Engineer)
|
||||||
|
**Company:** FrenoCorp
|
||||||
|
|
||||||
|
## Objective
|
||||||
|
|
||||||
|
Add actual file upload support to web platform with S3/minio storage integration.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
- File upload with multipart form data
|
||||||
|
- S3/minio integration for production
|
||||||
|
- Graceful fallback for local development
|
||||||
|
- 100MB file size limit enforcement
|
||||||
|
|
||||||
|
## Completed
|
||||||
|
|
||||||
|
### Storage Module (storage.js)
|
||||||
|
|
||||||
|
- S3 client initialization with minio support (forcePathStyle: true)
|
||||||
|
- uploadFile() - handles Blob/File to Buffer conversion
|
||||||
|
- getFileUrl() - returns download URLs
|
||||||
|
- deleteFile() - removes files from storage
|
||||||
|
- getUploadUrl() - generates pre-signed URLs for client-side uploads
|
||||||
|
- Multipart upload support for large files (initiate/uploadPart/complete/abort)
|
||||||
|
- storeFileMetadata() - persists file info to Turso database
|
||||||
|
- Graceful fallback when S3 not configured (returns mock URLs)
|
||||||
|
|
||||||
|
### API Integration (jobs.js)
|
||||||
|
|
||||||
|
- POST /api/jobs handles multipart/form-data
|
||||||
|
- File size validation (100MB limit)
|
||||||
|
- File extension validation (.epub, .pdf, .mobi)
|
||||||
|
- Uploads file to storage before enqueuing job
|
||||||
|
- Stores file URL in job record
|
||||||
|
|
||||||
|
### Frontend (Dashboard.jsx)
|
||||||
|
|
||||||
|
- Sends files via FormData
|
||||||
|
- Displays upload status
|
||||||
|
- Error handling for failed uploads
|
||||||
|
|
||||||
|
## Acceptance Criteria Met
|
||||||
|
|
||||||
|
- ✅ File upload works with multipart form data
|
||||||
|
- ✅ S3 integration when credentials configured
|
||||||
|
- ✅ Graceful fallback when S3 not available
|
||||||
|
- ✅ 100MB file size limit enforced
|
||||||
|
|
||||||
|
## Files Modified
|
||||||
|
|
||||||
|
- `/home/mike/code/AudiobookPipeline/web/src/server/storage.js` - Created
|
||||||
|
- `/home/mike/code/AudiobookPipeline/web/src/server/api/jobs.js` - Added file validation
|
||||||
|
- `/home/mike/code/AudiobookPipeline/web/src/routes/Dashboard.jsx` - Already integrated
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- @aws-sdk/client-s3
|
||||||
|
- @aws-sdk/lib-storage
|
||||||
|
- @aws-sdk/s3-request-presigner
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
S3 not configured in .env - graceful fallback active. Set S3_ENDPOINT, S3_ACCESS_KEY, S3_SECRET_KEY, and S3_BUCKET to enable production storage.
|
||||||
@@ -29,7 +29,6 @@ Created reusable filter components for list screens:
|
|||||||
- Added priority filter support (single-select pill row)
|
- Added priority filter support (single-select pill row)
|
||||||
- Changed from single-row to stacked layout
|
- Changed from single-row to stacked layout
|
||||||
- Each filter type gets its own row with background/border
|
- Each filter type gets its own row with background/border
|
||||||
|
|
||||||
- ✅ Updated `components/layouts/ListScreenLayout.tsx`
|
- ✅ Updated `components/layouts/ListScreenLayout.tsx`
|
||||||
- Added filterOptions2/filterOptions3 props for multiple filter rows
|
- Added filterOptions2/filterOptions3 props for multiple filter rows
|
||||||
- Mapped priority filters to FilterRow component
|
- Mapped priority filters to FilterRow component
|
||||||
@@ -43,10 +42,12 @@ Created reusable filter components for list screens:
|
|||||||
### Files Created/Modified
|
### Files Created/Modified
|
||||||
|
|
||||||
**New:**
|
**New:**
|
||||||
|
|
||||||
- `/home/mike/code/Firesoft/components/ui/DateRangeFilter.tsx`
|
- `/home/mike/code/Firesoft/components/ui/DateRangeFilter.tsx`
|
||||||
- `/home/mike/code/Firesoft/components/ui/MultiSelectFilter.tsx`
|
- `/home/mike/code/Firesoft/components/ui/MultiSelectFilter.tsx`
|
||||||
|
|
||||||
**Modified:**
|
**Modified:**
|
||||||
|
|
||||||
- `/home/mike/code/Firesoft/components/ui/FilterRow.tsx` - Added priority filter props
|
- `/home/mike/code/Firesoft/components/ui/FilterRow.tsx` - Added priority filter props
|
||||||
- `/home/mike/code/Firesoft/components/ui/index.ts` - Exported new components
|
- `/home/mike/code/Firesoft/components/ui/index.ts` - Exported new components
|
||||||
- `/home/mike/code/Firesoft/components/layouts/ListScreenLayout.tsx` - Added 2nd and 3rd filter rows
|
- `/home/mike/code/Firesoft/components/layouts/ListScreenLayout.tsx` - Added 2nd and 3rd filter rows
|
||||||
@@ -80,6 +81,7 @@ Verified complete Clerk JS SDK implementation:
|
|||||||
- ✅ All API routes protected via clerkAuthMiddleware
|
- ✅ All API routes protected via clerkAuthMiddleware
|
||||||
|
|
||||||
All acceptance criteria met:
|
All acceptance criteria met:
|
||||||
|
|
||||||
- Users can sign up with email/password
|
- Users can sign up with email/password
|
||||||
- Users can sign in and access protected routes
|
- Users can sign in and access protected routes
|
||||||
- Protected routes redirect to /sign-in when unauthenticated
|
- Protected routes redirect to /sign-in when unauthenticated
|
||||||
@@ -103,7 +105,53 @@ Core functionality complete from previous work. Minor UX enhancements remain (dr
|
|||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
Filter component library follows established patterns:
|
Filter component library follows established patterns:
|
||||||
|
|
||||||
- Inline styles with theme colors
|
- Inline styles with theme colors
|
||||||
- Pill-based selection for categorical filters
|
- Pill-based selection for categorical filters
|
||||||
- FormGroup-style grouping for related inputs
|
- FormGroup-style grouping for related inputs
|
||||||
- Accessibility labels and states throughout
|
- Accessibility labels and states throughout
|
||||||
|
|
||||||
|
## Completed Today (AudiobookPipeline)
|
||||||
|
|
||||||
|
**FRE-31: Implement File Upload with S3/minio Storage (DONE)**
|
||||||
|
|
||||||
|
Verified and completed implementation:
|
||||||
|
|
||||||
|
- ✅ S3 client initialized with graceful fallback when not configured
|
||||||
|
- ✅ uploadFile() handles Blob/File to Buffer conversion
|
||||||
|
- ✅ Multipart upload support for large files
|
||||||
|
- ✅ Pre-signed URL generation for client-side uploads
|
||||||
|
- ✅ File metadata stored in database via storeFileMetadata()
|
||||||
|
- ✅ POST /api/jobs handles multipart form data with file uploads
|
||||||
|
- ✅ Dashboard.jsx sends files via FormData
|
||||||
|
- ✅ Added 100MB file size limit enforcement
|
||||||
|
- ✅ Added file extension validation (.epub, .pdf, .mobi)
|
||||||
|
|
||||||
|
All acceptance criteria met:
|
||||||
|
|
||||||
|
- File upload works with multipart form data
|
||||||
|
- S3 integration when credentials configured
|
||||||
|
- Graceful fallback when S3 not available (mock URLs returned)
|
||||||
|
- 100MB file size limit enforced
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
Completed FRE-14 (Firesoft filter components) and FRE-31 (AudiobookPipeline file upload). Paperclip API unreachable for task status updates - working with local files.
|
||||||
|
|
||||||
|
**Latest: FRE-11 Complete**
|
||||||
|
|
||||||
|
Verified all reusable data display components exist and are in use:
|
||||||
|
- EntityList.tsx, EntityCard.tsx, StatsCard.tsx, StatusBadge.tsx
|
||||||
|
- incidents/index.tsx and training/index.tsx using reusable components
|
||||||
|
- Marked as done via Paperclip API
|
||||||
|
|
||||||
|
**Remaining assigned tasks (todo):**
|
||||||
|
|
||||||
|
- FRE-16: Optimize Batch Processing (low priority)
|
||||||
|
- FRE-17: Add Progress Tracking to Job Processor
|
||||||
|
- FRE-21: Implement Worker Auto-scaling
|
||||||
|
- FRE-22: Add Integration Tests for API Endpoints
|
||||||
|
- FRE-23: Set Up CI/CD Pipeline
|
||||||
|
- FRE-27: Add Comprehensive Logging and Monitoring
|
||||||
|
- FRE-28: Optimize Database Queries
|
||||||
|
- FRE-29: Implement Caching Layer
|
||||||
|
|||||||
@@ -95,3 +95,15 @@ day_of_week: Monday
|
|||||||
- 12:47 - Other blocked: FRE-41, FRE-43 (blocked on CTO infra)
|
- 12:47 - Other blocked: FRE-41, FRE-43 (blocked on CTO infra)
|
||||||
- 12:47 - No approvals pending
|
- 12:47 - No approvals pending
|
||||||
- 12:47 - Exiting cleanly - FRE-33 awaits board action
|
- 12:47 - Exiting cleanly - FRE-33 awaits board action
|
||||||
|
- 14:09 - Heartbeat triggered (heartbeat_timer)
|
||||||
|
- 14:09 - FRE-33: No new comments since 01:33Z - blocked-task dedup applies
|
||||||
|
- 14:09 - No task ID in wake context (PAPERCLIP_TASK_ID empty)
|
||||||
|
- 14:09 - Only 1 assignment: FRE-33 (blocked)
|
||||||
|
- 14:09 - Exiting cleanly - FRE-33 awaits board action
|
||||||
|
- 15:33 - Heartbeat triggered (heartbeat_timer)
|
||||||
|
- 15:33 - FRE-33: No new comments since 01:33Z - blocked-task dedup applies
|
||||||
|
- 15:33 - No task ID in wake context (PAPERCLIP_TASK_ID empty)
|
||||||
|
- 15:33 - Only 1 assignment: FRE-33 (blocked)
|
||||||
|
- 15:33 - Team status: CTO and Claude in error status, Atlas running, Hermes idle
|
||||||
|
- 15:33 - Other blocked: FRE-41, FRE-43 (blocked on CTO infra)
|
||||||
|
- 15:33 - Exiting cleanly - FRE-33 awaits board action
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ day_of_week: Monday
|
|||||||
- 11:08 - Completed comprehensive plan with phased implementation approach
|
- 11:08 - Completed comprehensive plan with phased implementation approach
|
||||||
- 11:08 - Reassigned FRE-53 back to board member for review
|
- 11:08 - Reassigned FRE-53 back to board member for review
|
||||||
- 13:11 - Scheduled heartbeat (timer); no assignments; exiting cleanly
|
- 13:11 - Scheduled heartbeat (timer); no assignments; exiting cleanly
|
||||||
|
- 15:12 - Scheduled heartbeat (timer); no assignments; exiting cleanly
|
||||||
|
- 15:42 - Wake triggered by retry_failed_run; no assignments; exiting cleanly
|
||||||
|
|
||||||
## Team Status
|
## Team Status
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
# SOUL.md -- Founding Engineer Persona
|
# SOUL.md -- Junior Engineer Persona
|
||||||
|
|
||||||
You are the Founding Engineer.
|
You are a Junior Engineer reporting to Atlas (Founding Engineer).
|
||||||
|
|
||||||
## Technical Posture
|
## Technical Posture
|
||||||
|
|
||||||
- You are the primary builder. Code, infrastructure, and systems are your domain.
|
- Execute tasks assigned by Atlas or senior engineers.
|
||||||
- Ship early, ship often. Perfection is the enemy of progress.
|
- Ship early, ship often. Perfection is the enemy of progress.
|
||||||
- Default to simple solutions. Over-engineering kills startups.
|
- Default to simple solutions. Over-engineering kills startups.
|
||||||
- Write code you can explain to a junior engineer six months from now.
|
- Write code you can explain to a peer engineer six months from now.
|
||||||
- Tests are not optional. They are documentation + safety net.
|
- Tests are not optional. They are documentation + safety net.
|
||||||
- Automate everything. Manual work is technical debt waiting to happen.
|
- Automate everything. Manual work is technical debt waiting to happen.
|
||||||
- Security and reliability are features, not afterthoughts.
|
- Security and reliability are features, not afterthoughts.
|
||||||
- Document as you go. The best docs are updated alongside code.
|
- Document as you go. The best docs are updated alongside code.
|
||||||
- Know your tradeoffs. Every decision has costs; make them explicit.
|
- Know your tradeoffs. Every decision has costs; make them explicit.
|
||||||
- Stay close to the codebase. You own it end-to-end.
|
- Ask for help early when stuck.
|
||||||
|
|
||||||
## Voice and Tone
|
## Voice and Tone
|
||||||
|
|
||||||
@@ -29,11 +29,10 @@ You are the Founding Engineer.
|
|||||||
|
|
||||||
## Responsibilities
|
## Responsibilities
|
||||||
|
|
||||||
- Build and maintain the product codebase.
|
- Execute tasks assigned by Atlas or senior engineers.
|
||||||
- Set up CI/CD, testing, and deployment pipelines.
|
- Write clean, tested code for product features.
|
||||||
- Choose and manage technical stack (with CEO input).
|
- Follow coding standards and review feedback promptly.
|
||||||
- Review and approve all code changes.
|
- Ask questions when unclear on requirements.
|
||||||
- Mentor other engineers when they join.
|
- Learn from code reviews and feedback.
|
||||||
- Balance speed vs. quality. Ship fast without burning out.
|
- Balance speed vs. quality. Ship fast without cutting corners.
|
||||||
- Flag technical debt and budget time to address it.
|
- Report blockers immediately to Atlas.
|
||||||
- Escalate resource constraints to the CEO early.
|
|
||||||
|
|||||||
157
agents/hermes/docs/CONTRIBUTING.md
Normal file
157
agents/hermes/docs/CONTRIBUTING.md
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
# Contributing to Hermes
|
||||||
|
|
||||||
|
Welcome! This guide will help you get started with the Hermes agent quickly.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Node.js 18+ and pnpm
|
||||||
|
- Git
|
||||||
|
- Paperclip API access (localhost:8087)
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
### 1. Clone the repository
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone <repository-url>
|
||||||
|
cd agents/hermes
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Install dependencies
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm install
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Configure your environment
|
||||||
|
|
||||||
|
Copy the `.env.example` file (if exists) and set required variables:
|
||||||
|
|
||||||
|
- `PAPERCLIP_API_URL=http://localhost:8087`
|
||||||
|
- `PAPERCLIP_AGENT_ID=<your-agent-id>`
|
||||||
|
- `PAPERCLIP_COMPANY_ID=<company-id>`
|
||||||
|
|
||||||
|
### 4. Verify setup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm paperclipai agent local-cli 14268c99-2acb-4683-928b-94d1bc8224e4 --company-id e4a42be5-3bd4-46ad-8b3b-f2da60d203d4
|
||||||
|
```
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
### Understanding the Agent System
|
||||||
|
|
||||||
|
Hermes is a Paperclip-powered agent that:
|
||||||
|
- Receives tasks via the Paperclip API
|
||||||
|
- Executes work within defined heartbeats
|
||||||
|
- Reports progress through issue comments and status updates
|
||||||
|
- Maintains local memory in the `memory/` directory
|
||||||
|
|
||||||
|
### Heartbeat Workflow
|
||||||
|
|
||||||
|
Each heartbeat follows this pattern:
|
||||||
|
|
||||||
|
1. **Check identity** - Confirm your agent ID and permissions
|
||||||
|
2. **Review assignments** - Get all assigned issues (todo, in_progress, blocked)
|
||||||
|
3. **Checkout tasks** - Claim tasks you're ready to work on
|
||||||
|
4. **Execute work** - Complete the assigned tasks using your tools
|
||||||
|
5. **Update status** - Mark tasks as done or blocked with comments
|
||||||
|
|
||||||
|
### Running a Heartbeat
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm paperclipai heartbeat run --agent-id 14268c99-2acb-4683-928b-94d1bc8224e4
|
||||||
|
```
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
hermes/
|
||||||
|
├── AGENTS.md # Agent instructions and capabilities
|
||||||
|
├── HEARTBEAT.md # Execution checklist
|
||||||
|
├── SOUL.md # Persona definition
|
||||||
|
├── TOOLS.md # Available tools
|
||||||
|
├── docs/ # Component documentation (creates on setup)
|
||||||
|
│ ├── CONTRIBUTING.md
|
||||||
|
│ └── COMPONENT_PATTERNS.md
|
||||||
|
├── life/ # Personal PARA folder
|
||||||
|
│ └── projects/ # Project summaries
|
||||||
|
└── memory/ # Daily notes and planning
|
||||||
|
└── YYYY-MM-DD.md # Date-based notes
|
||||||
|
```
|
||||||
|
|
||||||
|
## Documentation Guidelines
|
||||||
|
|
||||||
|
### Component Documentation (FRE-25)
|
||||||
|
|
||||||
|
All public components must have:
|
||||||
|
- JSDoc comments on exported components
|
||||||
|
- Clear prop descriptions with types
|
||||||
|
- Usage examples in the docblock
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
/**
|
||||||
|
* Button component for user interactions.
|
||||||
|
*
|
||||||
|
* @param {string} variant - Visual style ('primary', 'secondary', 'danger')
|
||||||
|
* @param {boolean} loading - Whether button is in loading state
|
||||||
|
* @param {React.ReactNode} children - Button content
|
||||||
|
* @returns {JSX.Element} Rendered button element
|
||||||
|
*/
|
||||||
|
export function Button({ variant = 'primary', loading, children }: ButtonProps) {
|
||||||
|
// implementation
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
All agents must have tests for:
|
||||||
|
- API interactions
|
||||||
|
- Heartbeat workflow
|
||||||
|
- Task status transitions
|
||||||
|
|
||||||
|
Run tests:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm test
|
||||||
|
```
|
||||||
|
|
||||||
|
## Code Style
|
||||||
|
|
||||||
|
- Follow existing patterns in the codebase
|
||||||
|
- Use TypeScript for type safety
|
||||||
|
- Write clear, self-documenting code
|
||||||
|
- Add comments for non-obvious logic
|
||||||
|
|
||||||
|
## Reporting Issues
|
||||||
|
|
||||||
|
When you encounter blockers:
|
||||||
|
|
||||||
|
1. Update issue status to `blocked`
|
||||||
|
2. Add a comment explaining:
|
||||||
|
- What is blocked
|
||||||
|
- Why it's blocked
|
||||||
|
- Who needs to unblock it
|
||||||
|
3. Escalate via chainOfCommand if needed
|
||||||
|
|
||||||
|
## Commit Guidelines
|
||||||
|
|
||||||
|
- Use conventional commits
|
||||||
|
- Reference issue IDs in commit messages
|
||||||
|
- Write clear, descriptive commit messages
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```
|
||||||
|
feat(hermes): add heartbeat workflow
|
||||||
|
fix(hermes): resolve 409 conflict on checkout
|
||||||
|
docs(hermes): update CONTRIBUTING.md
|
||||||
|
```
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
- [Paperclip API Reference](https://opencode.ai)
|
||||||
|
- [HEARTBEAT.md](./HEARTBEAT.md) - Execution checklist
|
||||||
|
- [SOUL.md](./SOUL.md) - Agent persona and guidelines
|
||||||
@@ -3,7 +3,7 @@ date: 2026-03-08
|
|||||||
day_of_week: Sunday
|
day_of_week: Sunday
|
||||||
task_id: FRE-31
|
task_id: FRE-31
|
||||||
title: Implement File Upload with S3/minio Storage
|
title: Implement File Upload with S3/minio Storage
|
||||||
status: in_progress
|
status: done
|
||||||
company_id: FrenoCorp
|
company_id: FrenoCorp
|
||||||
objective: Add actual file upload support to web platform with S3/minio storage integration
|
objective: Add actual file upload support to web platform with S3/minio storage integration
|
||||||
context: |
|
context: |
|
||||||
@@ -32,6 +32,8 @@ notes:
|
|||||||
- Updated POST /api/jobs to handle multipart form data
|
- Updated POST /api/jobs to handle multipart form data
|
||||||
- Updated Dashboard.jsx to send actual files via FormData
|
- Updated Dashboard.jsx to send actual files via FormData
|
||||||
- In-memory fallback logs warning but allows local testing
|
- In-memory fallback logs warning but allows local testing
|
||||||
|
- Added 100MB file size limit enforcement
|
||||||
|
- Added file extension validation (.epub, .pdf, .mobi)
|
||||||
|
|
||||||
links:
|
links:
|
||||||
web_codebase: /home/mike/code/AudiobookPipeline/web/
|
web_codebase: /home/mike/code/AudiobookPipeline/web/
|
||||||
|
|||||||
Reference in New Issue
Block a user