sooacette
v2.0.4
Published
CLI tool to interact with Cahier de recettage Sooatek API and launch local analysis
Downloads
55
Readme
🎯 Sooacette
Intelligent CLI for Automated Code Analysis & Implementation
Transform your testing workflow with AI-powered analysis From bug report to implementation in seconds
Quick Start • Features • Commands • Workflow • Configuration
📖 Table of Contents
- ✨ Features
- 🚀 Quick Start
- 📦 Installation
- ⚙️ Configuration
- 🔄 Complete Workflow
- 📋 Commands
- 🎯 Jira & Confluence Integration
- 🔧 MCP Configuration
- 💡 Use Cases
- 🐛 Troubleshooting
- 🤝 Contributing
✨ Features
🤖 AI-Powered Automation
- Claude Code Integration - Leverages Sonnet 4.5 for intelligent analysis
- Structured Output - Generates comprehensive analysis files automatically
- Two-Phase Workflow - Analysis → Implementation with clear separation
- 🆕 Multi-Backend Support - Switch between Claude Code and Codex CLI
- 🆕 Sub-Agent Architecture - Specialized agents for each workflow phase
🔗 Smart Integrations
- Jira Export - Automatic ticket creation on analysis start
- 🆕 Direct JIRA Retrieval - Fetch existing constats with full metadata
- Confluence Publishing - REST API v2 with automatic fallback publishing
- Auto-Versioning - Handles duplicate page titles (v2, v3, etc.)
- MCP Support - Integrates with project-specific MCP servers
- Intelligent Naming - Jira-based filenames (limited to 100 chars)
⚡ Powerful Automation
- Bulk Processing - Handle multiple constats simultaneously
- Autonomous Daemon - 24/7 monitoring and processing
- Watch Mode - Real-time detection of new constats
- Sequential/Parallel - Choose your processing strategy
- 🆕 Quality Gates - Enforce minimum 8/10 score for analysis approval
🌍 Cross-Platform
- Windows - Terminal, PowerShell, CMD support
- macOS - Native Terminal.app integration
- Linux - GNOME Terminal, Konsole, XTerm support
🚀 v2.0 Enhancements
🆕 v2.0.1 - JIRA Key Priority & Clean Analysis Output (2025-10-27)
JIRA Key Prioritization:
- ✅ Analysis files now use JIRA keys (e.g.,
FDP-209-Title) instead of numeric IDs (19742) - ✅ Consistent naming across all files: JSON, preprompt, analysis, implementation
- ✅ Eliminates filename mismatch errors (ENOENT) between backend and preprompt
- ✅ Improved traceability with JIRA keys in analysis titles
Clean Analysis Output:
- ✅ Removed template artifacts like "(≤50 mots)", "(≤75 mots)" from final analyses
- ✅ Professional, client-ready output without technical annotations
- ✅ Maintains quality constraints internally (Claude understands limits without showing them)
- ✅ +50% improved readability and presentation
Example:
Before (v2.0.0):
File: .recette/19742-analyse.md
Title: # Analyse 19742
**Résumé** (≤50 mots) : [text with artifacts]
After (v2.0.1):
File: .recette/FDP-209-Ajouter-un-QR-Code-simplifié-analyse.md
Title: # Analyse FDP-209-Ajouter-un-QR-Code-simplifié
**Résumé** : [clean text without annotations]Direct JIRA Retrieval (retrieve command)
- Fetch existing constats from JIRA with full metadata
- Automatically load briefing files from JIRA descriptions
- Smart context extraction for enhanced analysis
Enhanced Analysis Capabilities
- Route Identification - Auto-detect API endpoints and navigation routes
- UI Component Detection - Identify React components, forms, and UI elements
- Database Query Analysis - Extract and analyze SQL queries and schema
- Playwright Test Generation - Auto-generate E2E tests from workflows
- Business Term Verification - Cross-reference domain terminology
- Briefing File Integration - Load project-specific context automatically
AI-Powered Sub-Agent Workflow (Claude Code)
- Constat Analyzer - Deep analysis with specialized prompts
- Code Reviewer - Quality gate enforcement (minimum 8/10 score)
- Solution Implementer - Automated implementation with best practices
- Test Automation Writer - Generate comprehensive test coverage
- Confluence Publisher - Structured documentation generation
Multi-Backend Support
- Claude Code - Full sub-agent support with Task tool integration
- Codex CLI - Alternative backend with yolo mode for fast execution
- Configurable Switching - Choose backend via
.sooacette.json - Prompt Adaptation - Automatic translation between backend formats
🚀 Quick Start
Get up and running in 60 seconds:
# 1️⃣ Install globally
npm install -g sooacette
# 2️⃣ Navigate to your project
cd /path/to/your/project
# 3️⃣ Initialize local configuration
sooacette init
# 4️⃣ Configure your API key
cp .sooacette.local.example .sooacette.local.json
# Edit .sooacette.local.json and add your API key
# 5️⃣ Analyze your first constat
sooacette run <constat-id>
# 6️⃣ Implement the solution
sooacette implement <constat-id>Or use without installation:
npx sooacette run <constat-id>Legacy mode (global config):
# Set your API key
export SOOATEK_API_KEY="your-api-key-here"
# Use with -p flag
sooacette run <constat-id> -p myproject📦 Installation
Option 1: Global Installation (Recommended)
npm install -g sooacetteOption 2: NPX (No Installation Required)
npx sooacette [command]Option 3: Local Development
git clone <repository>
cd sooacette
npm install
npm run build
npm link # Makes CLI available globallyPrerequisites
| Requirement | Version | Notes | |------------|---------|-------| | Node.js | ≥ 18.0.0 | Download | | Claude Code CLI | Latest | Installation Guide | | API Access | Active Key | Cahier de recettage platform |
⚙️ Configuration
Sooacette supports two configuration modes:
🆕 Local Configuration (Recommended)
Per-project configuration - Each repository has its own config file.
Quick Setup
cd /path/to/your/project
sooacette initThis creates:
.sooacette.json (versioned - commit this file):
{
"$schema": "https://sooacette.dev/schema.json",
"project": "my-project",
"baseUrl": "https://doc.sooatek.com",
"auth": {
"apiKeyEnv": "SOOACETTE_API_KEY"
},
"launch": {
"cli": "claude-code",
"args": ["run"]
},
"terminal": {
"prefer": "auto",
"linux": "gnome-terminal",
"mac": "Terminal",
"windows": "wt"
}
}.sooacette.local.json (gitignored - never commit):
{
"auth": {
"apiKey": "sk-ant-api03-xxxxx"
}
}.sooacette.local.example (versioned - template for team):
{
"auth": {
"apiKey": "your_api_key_here"
}
}Security Best Practices
🔒 IMPORTANT: Always add to .gitignore:
.sooacette.local.jsonSooacette validates this automatically and will warn you if missing.
Team Onboarding
- Clone repository
- Copy:
cp .sooacette.local.example .sooacette.local.json - Edit
.sooacette.local.jsonwith your API key - Run:
sooacette run <constat-id>(no-pneeded!)
🔧 Global Configuration (Legacy)
Centralized configuration - For multiple projects in one config file.
Setup
On first run, Sooacette creates ~/.sooacette/config.json:
{
"defaultProject": "sooatek",
"projects": {
"sooatek": {
"baseUrl": "https://doc.sooatek.com",
"repoPath": "/absolute/path/to/your/repo",
"launch": {
"cli": "claude-code",
"args": ["run"]
},
"terminal": {
"prefer": "auto",
"mac": "Terminal",
"linux": "gnome-terminal",
"windows": "wt"
}
}
},
"auth": {
"apiKeyEnv": "SOOATEK_API_KEY"
}
}API Key Setup
Add to your shell profile (~/.bashrc, ~/.zshrc):
export SOOATEK_API_KEY="your-api-key-here"Then reload:
source ~/.bashrc # or ~/.zshrcUsage
# Use with -p flag
sooacette run <constat-id> -p myproject
# Or set default project
sooacette run <constat-id> # Uses defaultProject🔀 Configuration Resolution Order
Sooacette automatically detects which config to use:
-p/--projectflag → Use global config project.sooacette.jsonfound → Use local config (searches up directory tree)- Global
defaultProject→ Use global config default - Error → No configuration found
API Key Resolution
Priority order (first found wins):
.sooacette.local.json→auth.apiKey- Environment variable from local config →
process.env[auth.apiKeyEnv] - Environment variable from global config →
process.env[auth.apiKeyEnv]
🌐 Confluence Configuration (Optional)
Sooacette can automatically publish analysis files and implementation reports to Confluence using the Confluence REST API v2 with ADF (Atlassian Document Format).
Quick Setup (Interactive)
sooacette configure-confluenceThis interactive command will guide you through:
- Entering your Confluence base URL
- Entering your email address
- Creating and entering your API token
- Saving credentials to
~/.sooacette/confluence.json
Manual Setup
Option 1: Global Configuration (Recommended)
Create ~/.sooacette/confluence.json:
{
"baseUrl": "https://your-domain.atlassian.net",
"email": "[email protected]",
"apiToken": "your-api-token-here"
}Option 2: Environment Variables (Per-Project)
Set in your shell or .env file:
CONFLUENCE_BASE_URL=https://your-domain.atlassian.net
[email protected]
CONFLUENCE_API_TOKEN=your-api-token-hereConfiguration Priority
Sooacette checks for credentials in this order:
- Environment variables (highest priority)
- Global config file (
~/.sooacette/confluence.json) - No Confluence (analysis remains local)
Getting a Confluence API Token
- Go to https://id.atlassian.com/manage-profile/security/api-tokens
- Click Create API token
- Give it a label (e.g., "Sooacette")
- Copy the token and save it in your configuration
How It Works
When Confluence credentials are configured:
- ✅ Auto-publishing - Claude is instructed to run
sooacette publish-*commands - 🔄 Fallback system - If Claude forgets, auto-publishes after 30 seconds
- 📄 Dual publication - Both analysis and implementation reports published
- 🔁 Automatic versioning - Handles duplicate titles (adds v2, v3, etc.)
- 🌳 Proper hierarchy - Analysis and implementation as siblings under Jira page
Note: Publishing requires a Jira ticket with a Confluence page URL in its description.
📋 Configuration Reference
Local Config (.sooacette.json)
| Option | Type | Required | Description |
|--------|------|----------|-------------|
| $schema | string | No | JSON schema URL |
| project | string | No | Project name (defaults to folder name) |
| baseUrl | string | No | API endpoint (default: https://doc.sooatek.com) |
| auth.apiKeyEnv | string | No | Environment variable name |
| launch.cli | string | Yes | Command to execute (e.g., claude-code) |
| launch.args | string[] | Yes | CLI arguments |
| terminal.prefer | string | No | Terminal preference |
| terminal.linux | string | No | Linux terminal (default: gnome-terminal) |
| terminal.mac | string | No | macOS terminal (default: Terminal) |
| terminal.windows | string | No | Windows terminal (default: wt) |
| mcp.configFile | string | No | MCP config file path |
| additionalDirectories | array | No | Additional directories to include in analysis (v2.0) |
Additional Directories (v2.0)
Use case: When your project spans multiple repositories (e.g., backend + frontend + mobile app), you can configure Sooacette to give Claude access to all related codebases during analysis.
Configuration example in .sooacette.json:
{
"project": "my-backend",
"baseUrl": "https://doc.sooatek.com",
"additionalDirectories": [
{
"path": "../frontend",
"description": "Frontend React application",
"indexForSearch": true
},
{
"path": "/absolute/path/to/mobile-app",
"description": "Mobile app (React Native)",
"indexForSearch": false
}
]
}Directory object properties:
| Property | Type | Required | Description |
|----------|------|----------|-------------|
| path | string | Yes | Absolute or relative path to directory (relative to repo root) |
| description | string | No | Description of the directory's purpose |
| indexForSearch | boolean | No | Enable semantic search indexing (default: false) |
What it does:
- Resolves paths - Converts relative paths to absolute paths automatically
- Validates existence - Warns if directories don't exist
- Includes in preprompt - Claude is informed about these directories
- Enables access - Claude can use Read, Grep, Glob on additional directories
- Optional indexing - Semantic search with claude-context MCP if enabled
Example use cases:
- Monorepo architecture - Multiple apps in subdirectories
- Multi-repo projects - Backend, frontend, mobile in separate repos
- Shared libraries - Common code across projects
- Documentation - Technical specs in separate repository
In the preprompt, Claude sees:
## 📂 Répertoires Additionnels
**IMPORTANT** : Ce projet inclut des répertoires supplémentaires auxquels vous avez accès :
### Frontend React application
- **Chemin** : `/absolute/path/to/frontend`
- **Description** : Frontend React application
- **Accès** : Vous pouvez utiliser Read, Grep, Glob sur ce répertoire
- **Indexation** : Ce répertoire est indexé pour la recherche sémantique
**Utilisation** : Lors de l'analyse, explorez ces répertoires si le constat y fait référence (API, mobile, frontend, etc.)Local Secrets (.sooacette.local.json)
| Option | Type | Description |
|--------|------|-------------|
| auth.apiKey | string | API key (never commit!) |
Global Config (~/.sooacette/config.json)
| Option | Type | Description |
|--------|------|-------------|
| defaultProject | string | Default project when --project is omitted |
| projects.*.baseUrl | string | API endpoint for the project |
| projects.*.repoPath | string | Absolute path to local repository |
| projects.*.launch.cli | string | Command to execute |
| projects.*.launch.args | string[] | CLI arguments |
| projects.*.terminal.prefer | string | Terminal preference |
| auth.apiKeyEnv | string | Environment variable containing API key |
🔄 Complete Workflow
graph TD
A[📥 Fetch Constat] --> B[🎫 Export to Jira]
B --> C[📄 Get Jira Details]
C --> D[🔗 Extract Confluence URL]
D --> E[🤖 Launch Claude Code]
E --> F[📝 Generate Analysis]
F --> G[✅ Create Local .md File]
G --> H[🌐 Publish to Confluence]
H --> I{Review OK?}
I -->|Yes| J[🚀 Implement Solution]
I -->|No| K[🔄 Revise Analysis]
K --> F
J --> L[✅ Update Status]
L --> M[🎉 Done!]Phase 1: Analysis 🔍
sooacette run <constat-id>What happens:
- 📥 Fetches constat from API
- 🎫 Exports to Jira (creates/updates ticket)
- 📄 Retrieves Jira issue details (summary, description)
- 🔗 Extracts Confluence URL from Jira description
- 📝 Creates
.recette/<JIRA-KEY>-<Title>.json(max 100 chars) - 🤖 Launches Claude Code with preprompt
- 📊 Claude analyzes and creates
.recette/<JIRA-KEY>-<Title>-analyse.md - 📤 Claude publishes to Confluence (executes
sooacette publish-analysis) - 🔄 Fallback auto-publish (if Claude forgets, auto-publishes after 30s)
Example filename:
.recette/GSL-123-FEAT-001-Login-Bouton-non-fonctionnel.jsonPhase 2: Review & Implementation ✅
# Review the analysis
cat .recette/<filename>-analyse.md
# Or view on Confluence (if published)
# URL shown in terminal output
# Implement if satisfied
sooacette implement <constat-id>What happens:
- 📖 Reads analysis file (or fetches from Confluence if available)
- 🚀 Launches Claude Code with implementation prompt
- 🔧 Claude applies modifications
- ✅ Claude creates
.recette/<JIRA-KEY>-<Title>-implementation-report.md - 📤 Claude publishes report to Confluence (executes
sooacette publish-implementation) - 🔄 Fallback auto-publish (if Claude forgets, auto-publishes after 30s)
- ✅ Updates status
📋 Commands
init - Initialize Local Configuration
🆕 New Command - Create a local configuration for your project.
sooacette init [project-name] [options]What It Does
- Creates
.sooacette.json(versioned configuration) - Creates
.sooacette.local.example(template for secrets) - Displays setup instructions
Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| project-name | string | folder name | Project name |
| --baseUrl <url> | string | https://doc.sooatek.com | API base URL |
| --cli <command> | string | claude-code | CLI command to execute |
| --force | boolean | false | Overwrite existing files |
Examples
# Basic initialization
cd /path/to/my-project
sooacette init
# With custom project name
sooacette init my-awesome-project
# With custom API URL
sooacette init --baseUrl https://api.custom.com
# Overwrite existing config
sooacette init --forceAfter init
Follow the displayed instructions:
✓ Created .sooacette.json
✓ Created .sooacette.local.example
Next steps:
1. Copy .sooacette.local.example to .sooacette.local.json
2. Edit .sooacette.local.json and add your API key
3. Add .sooacette.local.json to .gitignore
⚠️ IMPORTANT: Never commit .sooacette.local.json to git!
✓ Project "my-project" initialized successfullyconfigure-confluence - Setup Confluence Credentials
🆕 New Command - Interactive setup for Confluence publishing.
sooacette configure-confluenceWhat It Does
- Prompts for your Confluence base URL
- Prompts for your email address
- Guides you to create an API token
- Saves credentials to
~/.sooacette/confluence.json - Validates the configuration
Interactive Flow
🔧 Configure Confluence Integration
Enter your Confluence base URL (e.g., https://your-domain.atlassian.net):
> https://sooatek.atlassian.net
Enter your Confluence email address:
> [email protected]
ℹ️ To create an API token:
1. Go to https://id.atlassian.com/manage-profile/security/api-tokens
2. Click 'Create API token'
3. Give it a label (e.g., "Sooacette")
4. Copy the generated token
Enter your Confluence API token:
> ****************************
✓ Confluence configuration saved to ~/.sooacette/confluence.json
You can now publish analyses to Confluence using:
- sooacette publish-analysis <id>
- sooacette publish-implementation <id>Security
- Credentials are stored in your home directory (
~/.sooacette/) - File permissions are set to
0600(owner read/write only) - Never committed to git (outside project directories)
When to Use
- First-time setup - Configure Confluence once for all projects
- Update credentials - Change base URL, email, or token
- Multiple accounts - Run again to replace configuration
list - List Constats
List constats with powerful filtering options.
sooacette list [options]Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| -p, --project <name> | string | config default | Project name |
| -s, --state <state> | string | - | Filter by state |
| --priority <priority> | string | - | Filter by priority |
| --page <number> | number | 1 | Page number |
| --limit <number> | number | 50 | Results per page |
| --json | boolean | false | Output as JSON |
Examples
# List all constats
sooacette list
# Filter by state and priority
sooacette list --state Nouveau --priority Critical
# Export to JSON
sooacette list --json > constats.json
# Paginated results
sooacette list --page 2 --limit 20show - Show Constat Details
Display detailed information about a specific constat.
sooacette show <id> [options]Examples
# Show constat details
sooacette show U-R68fKqXLCtdp81u0KiJ
# Output as JSON
sooacette show U-R68fKqXLCtdp81u0KiJ --jsonretrieve - Direct JIRA Retrieval
🆕 v2.0 Command - Fetch existing constats directly from JIRA with full metadata.
sooacette retrieve <jira-key> [options]What It Does
- 📥 Fetches JIRA issue details using the JIRA REST API
- 📝 Extracts briefing files from JIRA description (if present)
- 🔍 Loads project-specific context automatically
- 💾 Creates local
.recette/<JIRA-KEY>-<Title>.jsonfile - 📄 Prepares for enhanced analysis with full JIRA context
Options
| Option | Type | Description |
|--------|------|-------------|
| <jira-key> | string | JIRA issue key (e.g., GSL-123, PROJ-456) |
| -p, --project <name> | string | Project name (for multi-project setups) |
| --json | boolean | Output raw JSON response |
Examples
# Retrieve JIRA issue
sooacette retrieve GSL-123
# Retrieve with specific project
sooacette retrieve GSL-123 -p myproject
# Output as JSON
sooacette retrieve GSL-123 --jsonOutput Example
ℹ Fetching JIRA issue GSL-123...
✓ Fetched JIRA issue: [FEAT-001] Login - Authentication Bug
✓ Found Confluence page: https://your-domain.atlassian.net/wiki/...
✓ Extracted 2 briefing files from description
- briefings/auth-context.md
- briefings/api-endpoints.md
✓ Wrote constat data to .recette/GSL-123-FEAT-001-Login-Authentication-Bug.json
✓ Ready for analysis with sooacette run GSL-123Briefing File Integration
The retrieve command automatically extracts briefing file references from JIRA descriptions:
JIRA Description Format:
## Context
This issue is related to authentication system.
## Briefing Files
- briefings/auth-context.md
- briefings/security-guidelines.md
## Steps to Reproduce
...What Happens:
- Sooacette parses the description
- Extracts file paths under
## Briefing Filessection - Stores them in the constat data
- Analysis phase automatically loads these files for context
When to Use
- Existing JIRA tickets - When you already have a JIRA issue created
- External systems - When constats are created outside of Sooacette
- Manual workflow - When you want to start from JIRA instead of API
- Re-analysis - When you need to re-fetch updated JIRA information
Workflow Comparison
Traditional Workflow (run command):
API Constat → Export to JIRA → Fetch JIRA → AnalyzeDirect JIRA Workflow (retrieve command):
JIRA Issue → Retrieve → Analyzerun - Analyze Single Constat
🎯 Core Command - Launches full analysis workflow for a single constat.
sooacette run <id> [options]Workflow Steps
| Step | Action | Output |
|------|--------|--------|
| 1️⃣ | Fetch constat from API | Console log |
| 2️⃣ | Export to Jira | ✓ Exported to Jira: GSL-123 |
| 3️⃣ | Get Jira issue details | ✓ Fetched Jira issue: [Title] |
| 4️⃣ | Extract Confluence URL | ✓ Found Confluence page: [URL] |
| 5️⃣ | Create intelligent filename | GSL-123-FEAT-001-Login-... |
| 6️⃣ | Write JSON file | .recette/<filename>.json |
| 7️⃣ | Generate preprompt | .recette/<filename>-preprompt.md |
| 8️⃣ | Launch Claude Code | Opens terminal |
| 9️⃣ | Claude creates analysis | .recette/<filename>-analyse.md |
| 🔟 | Publish to Confluence | Child page created |
Options
| Option | Description |
|--------|-------------|
| -p, --project <name> | Project name |
| --dry-run | Preview script without executing |
Examples
# Analyze a constat
sooacette run U-R68fKqXLCtdp81u0KiJ
# Dry run (see what would be executed)
sooacette run U-R68fKqXLCtdp81u0KiJ --dry-runWhat Gets Created
.recette/
├── GSL-123-Login-Bouton-non-fonctionnel.json
├── GSL-123-Login-Bouton-non-fonctionnel-preprompt.md
└── GSL-123-Login-Bouton-non-fonctionnel-analyse.mdbulk - Batch Processing
Process multiple constats simultaneously with smart filtering.
sooacette bulk [options]Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| -p, --project <name> | string | config default | Project name |
| -s, --state <state> | string | Nouveau | Filter by state |
| --priority <priority> | string | - | Filter by priority |
| -l, --limit <number> | number | 10 | Max constats to process |
| --no-confirm | boolean | false | Skip confirmation |
| --sequential | boolean | false | Process one-by-one with delay |
Examples
# Process 10 newest constats (with confirmation)
sooacette bulk
# Process critical constats only
sooacette bulk --state Nouveau --priority Critical --limit 20
# Sequential mode (one terminal at a time)
sooacette bulk --sequential --limit 5
# No confirmation (automated)
sooacette bulk --no-confirm --limit 50Visual Output
Found 15 constat(s) (Total: 42)
Constats to process:
────────────────────────────────────────────────────────────────────────────────
1. [Critical] U-R68fKqXLCtdp81u0KiJ - Nouveau
Le processus de reprise n'est pas correct. Pour un licencié qui change...
2. [High] U-ABC123DEF456GHI789 - Nouveau
Erreur lors de la validation du formulaire d'inscription...
...
────────────────────────────────────────────────────────────────────────────────
Do you want to process these 15 constat(s)? (y/n):publish-analysis - Publish Analysis to Confluence
📤 Publication Command - Publish an analysis file to Confluence.
sooacette publish-analysis <id> [options]Prerequisites
- Analysis file must exist:
.recette/<filename>-analyse.md - Confluence credentials configured (run
sooacette configure-confluence) - Jira ticket must have a Confluence page URL in its description
What It Does
- ✅ Checks if analysis file exists and is complete
- 📄 Gets constat data and extracts Confluence URL from Jira
- 🔄 Converts Markdown to ADF (Atlassian Document Format)
- 🌐 Creates a child page under the Jira page (via REST API v2)
- 🔁 Auto-versioning - If title exists, adds v2, v3, etc.
- 🔗 Returns the URL of the created Confluence page
- ✅ Marks as published (prevents auto-publish fallback)
Options
| Option | Description |
|--------|-------------|
| -p, --project <name> | Project name |
| -u, --confluence-url <url> | Override Confluence URL |
Examples
# Publish analysis to Confluence
sooacette publish-analysis U-R68fKqXLCtdp81u0KiJ
# With specific project
sooacette publish-analysis U-R68fKqXLCtdp81u0KiJ -p myproject
# With manual Confluence URL
sooacette publish-analysis U-R68fKqXLCtdp81u0KiJ -u https://your-domain.atlassian.net/wiki/...Output
ℹ Publishing analysis for constat U-R68fKqXLCtdp81u0KiJ...
ℹ Fetching Jira issue GSL-123...
✓ Fetched Jira issue: [FEAT-001] Login - Bug
✓ Found Confluence URL: https://your-domain.atlassian.net/wiki/...
ℹ Publishing analysis to Confluence...
✓ Analysis published to Confluence: https://your-domain.atlassian.net/wiki/spaces/SPACE/pages/123456/Analyse+Technique+-+Constat+U-R68fKqXLCtdp81u0KiJWith auto-versioning (if duplicate title):
ℹ️ Page created with title: Analyse Technique - Constat U-R68fKqXLCtdp81u0KiJ v2
✓ Analysis published to Confluence: https://...Auto-Publishing Fallback
If Claude Code doesn't execute this command:
- Watcher activates after 30 seconds
- Automatically publishes the analysis
- Logs warning that manual publication was missed
This ensures analyses are always published to Confluence.
When to Use
- Manual publishing - When you want control over publication timing
- Retry after failure - If automatic publication failed
- Re-publishing - Create new version after client feedback (auto-versioned)
- Selective publishing - Only publish certain analyses
publish-implementation - Publish Implementation Report
📤 Publication Command - Publish an implementation report to Confluence.
sooacette publish-implementation <id> [options]Prerequisites
- Implementation report must exist:
.recette/<filename>-implementation-report.md - Confluence credentials configured (run
sooacette configure-confluence) - Jira ticket must have a Confluence page URL in its description
What It Does
- ✅ Checks if implementation report exists
- 📄 Gets constat data and extracts Confluence URL from Jira
- 🔄 Converts Markdown to ADF (Atlassian Document Format)
- 🌳 Creates sibling page - Same level as analysis (both under Jira page)
- 🔁 Auto-versioning - If title exists, adds v2, v3, etc.
- 🔗 Returns the URL of the created Confluence page
- ✅ Marks as published (prevents auto-publish fallback)
Page Hierarchy
📄 Jira Page (e.g., GSL-123)
├── 📊 Analyse Technique - Constat xxx (created by publish-analysis)
└── ✅ Rapport d'Implémentation - Constat xxx (created by publish-implementation)Both pages are siblings at the same level under the Jira page.
Options
| Option | Description |
|--------|-------------|
| -p, --project <name> | Project name |
| -u, --confluence-url <url> | Override Confluence URL (Jira page) |
Examples
# Publish implementation report to Confluence
sooacette publish-implementation U-R68fKqXLCtdp81u0KiJ
# With specific project
sooacette publish-implementation U-R68fKqXLCtdp81u0KiJ -p myproject
# With manual Confluence URL
sooacette publish-implementation U-R68fKqXLCtdp81u0KiJ -u https://your-domain.atlassian.net/wiki/...Output
ℹ Publishing implementation report for constat U-R68fKqXLCtdp81u0KiJ...
ℹ Fetching Jira issue GSL-123...
✓ Found Confluence URL (Jira page): https://your-domain.atlassian.net/wiki/...
ℹ Publishing implementation report to Confluence...
✓ Implementation report published to Confluence: https://your-domain.atlassian.net/wiki/spaces/SPACE/pages/789012/Rapport+ImplementationAuto-Publishing Fallback
If Claude Code doesn't execute this command during implementation:
- Watcher activates after 30 seconds
- Automatically publishes the report
- Logs warning that manual publication was missed
This ensures implementation reports are always published to Confluence.
When to Use
- After implementation - Document what was done
- Manual publishing - When you want control over publication timing
- Retry after failure - If automatic publication failed
- Re-implementation - Create new version after changes (auto-versioned)
implement - Execute Solution
Implement the solution from a previously created analysis file.
sooacette implement <id> [options]Prerequisites
- Analysis file must exist:
.recette/<filename>-analyse.md - Status should be:
⏳ En attente d'implémentation
Examples
# Implement solution
sooacette implement U-R68fKqXLCtdp81u0KiJ
# Dry run
sooacette implement U-R68fKqXLCtdp81u0KiJ --dry-runWhat Happens
- 📖 Reads
.recette/<filename>-analyse.md - 🚀 Generates implementation prompt
- 💻 Opens Claude Code with instructions
- 🔧 Claude applies modifications
- ✅ Runs tests
- 📝 Updates analysis status to
✅ Implémenté
implement-bulk - Batch Implementation
Implement multiple solutions from pending analysis files.
sooacette implement-bulk [options]Options
| Option | Type | Description |
|--------|------|-------------|
| -p, --project <name> | string | Project name |
| -l, --limit <number> | number | Max implementations |
| --no-confirm | boolean | Skip confirmation |
| --sequential | boolean | Process one-by-one |
Examples
# Implement all pending analyses
sooacette implement-bulk
# Sequential with limit
sooacette implement-bulk --sequential --limit 5
# Automated mode
sooacette implement-bulk --no-confirmdaemon - Autonomous Mode
🤖 Fully Automated - Runs continuously, monitoring and processing constats 24/7.
sooacette daemon [options]Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| -p, --project <name> | string | config default | Project name |
| -s, --state <state> | string | Nouveau | Filter by state |
| --priority <priority> | string | - | Filter by priority |
| --interval <duration> | string | 1m | Polling interval |
| --analysis-timeout <duration> | string | 10m | Max wait for analysis |
| --auto-implement | boolean | false | Auto-implement after analysis |
Examples
# Basic daemon (analysis only)
sooacette daemon
# Full automation
sooacette daemon --auto-implement
# Custom settings
sooacette daemon --interval 30s --analysis-timeout 5m --priority Critical
# Production mode
sooacette daemon --interval 1m --auto-implement --state NouveauHow It Works
┌─────────────────────────────────────────────────────────────┐
│ 🤖 Sooacette Daemon - Autonomous Mode │
├─────────────────────────────────────────────────────────────┤
│ │
│ [14:30:15] 🔄 Polling API... │
│ 📥 Found 2 new constat(s) │
│ │
│ 🔍 Starting analysis: U-R68fKqXLCtdp81u0KiJ │
│ ℹ Exporting to Jira... │
│ ✓ Exported to Jira: GSL-123 │
│ ℹ Fetching Jira issue details for GSL-123... │
│ ✓ Fetched Jira issue: [FEAT-001] Login - Bug │
│ ✓ Found Confluence page: https://... │
│ ✓ Wrote constat data to .recette/GSL-123-...json │
│ ✓ Wrote preprompt to .recette/GSL-123-...-preprompt.md │
│ ℹ Opening terminal... │
│ ✓ Launched analysis for U-R68fKqXLCtdp81u0KiJ │
│ │
│ [14:31:15] 🔄 Polling API... │
│ 📊 Status: 1 analyzing, 0 analyzed, 0 implemented │
│ │
│ [14:32:15] 🔄 Polling API... │
│ 📄 Analysis ready: U-R68fKqXLCtdp81u0KiJ │
│ Status: ⏳ En attente d'implémentation │
│ 🚀 Auto-implementing solution... │
│ ✓ Launched implementation for U-R68fKqXLCtdp81u0KiJ │
│ │
│ 📊 Status: 0 analyzing, 1 analyzed, 1 implemented │
└─────────────────────────────────────────────────────────────┘State Management
The daemon maintains state in ~/.sooacette/daemon-cache.json:
{
"processedIds": ["U-R68fKqXLCtdp81u0KiJ", "U-ABC123..."],
"analyzing": {
"U-XYZ789...": {
"startedAt": "2025-10-16T14:30:00.000Z",
"checkedCount": 3
}
},
"analyzed": ["U-R68fKqXLCtdp81u0KiJ"],
"implemented": ["U-R68fKqXLCtdp81u0KiJ"]
}Running as Service
Create /etc/systemd/system/sooacette-daemon.service:
[Unit]
Description=Sooacette Daemon - Automated Constat Analysis
After=network.target
[Service]
Type=simple
User=your-user
WorkingDirectory=/path/to/repo
Environment="SOOATEK_API_KEY=your-api-key"
ExecStart=/usr/local/bin/sooacette daemon --auto-implement --interval 1m
Restart=always
RestartSec=10
StandardOutput=append:/var/log/sooacette-daemon.log
StandardError=append:/var/log/sooacette-daemon.error.log
[Install]
WantedBy=multi-user.targetEnable and start:
sudo systemctl enable sooacette-daemon
sudo systemctl start sooacette-daemon
sudo systemctl status sooacette-daemon
# View logs
sudo journalctl -u sooacette-daemon -fwatch - Watch for New Constats
Continuously monitor for new constats and open terminals automatically.
sooacette watch [options]Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| -p, --project <name> | string | config default | Project name |
| -s, --state <state> | string | Nouveau | Filter by state |
| --priority <priority> | string | - | Filter by priority |
| --interval <duration> | string | 30s | Polling interval |
| --since <ISO date> | string | - | Only constats after date |
Examples
# Watch for new constats
sooacette watch
# Custom interval
sooacette watch --interval 1m
# With filters
sooacette watch --state Nouveau --priority Critical
# Since specific date
sooacette watch --since 2025-01-01T00:00:00Z💡 Tip: Use
daemoninstead ofwatchfor more advanced features like analysis detection and auto-implementation.
🎯 Jira & Confluence Integration
Automatic Jira Export
When you start analysis (via run, bulk, or daemon), Sooacette automatically:
- Calls
POST /api/constats/{id}/export-jira - Retrieves the Jira issue key (e.g.,
GSL-123) - Fetches full Jira issue details via
GET /api/jira/issues/{key} - Extracts Confluence URL from Jira description
- Uses Jira info for intelligent file naming
Example Output:
ℹ Exporting to Jira...
✓ Exported to Jira: GSL-123
ℹ Fetching Jira issue details for GSL-123...
✓ Fetched Jira issue: [FEAT-001] Login - Bouton non fonctionnel
✓ Found Confluence page: https://sooatek.atlassian.net/wiki/spaces/FDP/pages/12345/...
Using filename: GSL-123-FEAT-001-Login-Bouton-non-fonctionnelConfluence Page Creation
NEW: Sooacette publishes to Confluence using the Confluence REST API v2 with ADF (Atlassian Document Format).
How It Works
When Confluence credentials are configured (see Confluence Configuration):
- Primary method - Claude Code executes
sooacette publish-*commands - Fallback system - Auto-publishes after 30s if Claude forgets
- Dual publication - Both analysis and implementation reports published
- Child page creation - Creates pages under the Jira ticket's Confluence page
- Markdown to ADF - Automatic conversion to Atlassian Document Format
- Auto-versioning - Handles duplicate titles (adds v2, v3, etc.)
Publication Methods
Method 1: Claude Executes Commands (Preferred)
# Claude is instructed via preprompt to execute:
sooacette publish-analysis <id>
sooacette publish-implementation <id>Method 2: Auto-Publish Fallback (Safety Net)
- Background watcher monitors for file creation
- Waits 30 seconds for Claude to publish
- Auto-publishes if marker file doesn't exist
- Prevents missed publications
Page Hierarchy
📄 Jira Page (e.g., GSL-123)
├── 📊 Analyse Technique - Constat xxx
└── ✅ Rapport d'Implémentation - Constat xxxBoth pages are siblings at the same level under the Jira page.
Why This Structure?
- 📄 Preserves the main Jira page (may contain templates)
- 🗂️ Organized structure (Jira → Analysis + Implementation)
- 🔗 Easy navigation from Jira ticket
- 🔒 No risk of overwriting existing content
- 🔄 Analysis and implementation at same level (not parent-child)
Auto-Versioning
If a page title already exists (e.g., after re-analysis):
First publication: "Analyse Technique - Constat xxx"
Second publication: "Analyse Technique - Constat xxx v2"
Third publication: "Analyse Technique - Constat xxx v3"
...This allows:
- 📝 Re-analysis after client feedback
- 🔄 Multiple implementation attempts
- 📜 Version history preservation
- ✅ No manual title management needed
Document Format
Pages are published in ADF (Atlassian Document Format), Confluence's native JSON-based format:
Key Features:
- ✅ Native Confluence format (REST API v2)
- 🎨 Rich formatting (headings, lists, code blocks, tables)
- 🔗 Proper hyperlinks and cross-references
- 📊 Structured document hierarchy
- ⚡ Better performance than Storage Format
Example ADF Structure:
{
"version": 1,
"type": "doc",
"content": [
{
"type": "heading",
"attrs": { "level": 1 },
"content": [{ "type": "text", "text": "Analyse Technique" }]
},
{
"type": "paragraph",
"content": [{ "type": "text", "text": "Content..." }]
}
]
}Intelligent File Naming
Files are named using Jira information with a 100-character limit:
Pattern: {JIRA-KEY}-{Safe-Title}.{extension}
Max length: 100 characters totalExamples:
| Jira Summary | Generated Filename |
|--------------|-------------------|
| [FEAT-001] Login - Bouton non fonctionnel | GSL-123-FEAT-001-Login-Bouton-non-fonctionnel.json |
| Bug d'affichage sur la page de connexion utilisateur avec des caractères spéciaux | GSL-456-Bug-daffichage-sur-la-page-de-connexion-utilisateur-avec-des-caracteres-spe.json |
| Très long titre avec beaucoup de détails techniques supplémentaires qui dépassent largement la limite | GSL-789-Tres-long-titre-avec-beaucoup-de-details-techniques-supplementaires-qui-depas.json |
Fallback: If Jira export fails or no Jira key, uses constat ID:
U-R68fKqXLCtdp81u0KiJ.json🔧 MCP Configuration
What is MCP?
Model Context Protocol (MCP) allows Claude to access project-specific tools and capabilities.
How Sooacette Uses MCP
- Reads
mcp.mdfrom your repository root (if exists) - Includes it in preprompt sent to Claude Code
- Claude uses MCP servers as documented
- Enhanced analysis with project-specific context
Creating mcp.md
Create this file at your repository root to document available MCP servers.
Example mcp.md:
# MCP Configuration - Geslico
## Available MCP Servers
### 🔧 IDE MCP Server
**Name**: `mcp__ide__*`
**Capabilities**:
- Get code diagnostics (errors, warnings, suggestions)
- Execute Python code in Jupyter notebooks
### 🌐 Playwright MCP Server
**Name**: `mcp__playwright__*`
**Capabilities**:
- Browser automation for E2E testing
- Take screenshots and accessibility snapshots
- Interact with web elements (click, type, select)
- Monitor network and console logs
### 🔍 Claude Context MCP Server
**Name**: `mcp__claude-context__*`
**Capabilities**:
- Semantic codebase indexing
- Natural language code search
- Project structure analysis
- Identify duplicate code
### 🎫 Atlassian MCP Server (Optional)
**Name**: `mcp__atlassian__*`
**Note:** **No longer required for Confluence publishing!** Sooacette now uses the Confluence REST API directly.
**Capabilities**:
- List Confluence spaces
- Create and update Confluence pages (now handled by Sooacette directly)
- Search Confluence content
- Get Jira issue details (if needed for other purposes)
## Project Architecture
### Backend
- **Framework**: Symfony 7.2
- **PHP**: 8.3
- **API**: API Platform 4.0
- **Database**: MariaDB 10
### Frontend
- **Framework**: Vue.js 2
- **UI**: Bootstrap 5
- **Build**: Webpack Encore
## Analysis Guidelines
1. **Always check the database schema** before making assumptions
2. **Follow coding standards** documented in `docs/CONTRIBUTING.md`
3. **Run tests** before proposing solutions
4. **Document complex logic** with clear comments
5. **Use MCP Playwright** for E2E testing when modifying UIMCP in Preprompts
The preprompt automatically includes MCP configuration when available:
- If
mcp.mdexists in your repository, its content is included in the preprompt - Claude Code can use configured MCP servers for enhanced analysis
- Confluence publishing is handled by Sooacette directly (no MCP Atlassian required!)
Example preprompt section:
## Configuration MCP du Projet
[Content from your mcp.md file...]
## Mission
Analyser ce constat de recettage et proposer une solution appropriée.Publishing Without MCP
Previous workflow (deprecated):
- Required MCP Atlassian server
- Claude had to use
mcp__atlassian__createPagetool - Complex setup and authentication
New workflow (current):
- ✅ Uses Confluence REST API v2 directly
- ✅ Claude executes
sooacette publish-*bash commands - ✅ Simple configuration with
sooacette configure-confluence - ✅ Auto-publish fallback ensures reliability
- ✅ No MCP server required for Confluence
This change makes Sooacette more reliable and easier to set up!
💡 Use Cases
🎯 Single Constat Analysis
Perfect for focused bug fixes or feature analysis.
# One-time setup (per project)
cd /path/to/project
sooacette init
cp .sooacette.local.example .sooacette.local.json
# Edit .sooacette.local.json with your API key
# Step 1: Analyze (no -p flag needed!)
sooacette run U-R68fKqXLCtdp81u0KiJ
# Step 2: Review
cat .recette/GSL-123-FEAT-001-Login-Bug-analyse.md
# Step 3: Implement
sooacette implement U-R68fKqXLCtdp81u0KiJTime saved: ~30 minutes per constat
📦 Batch Processing
Process multiple constats for sprint planning or backlog grooming.
# Step 1: Analyze all critical constats
sooacette bulk --state Nouveau --priority Critical --limit 20
# Step 2: Review all analyses
ls -la .recette/*-analyse.md
# Step 3: Implement approved solutions
sooacette implement-bulkTime saved: ~2-3 hours for 10 constats
🤖 Fully Automated (24/7 Monitoring)
Set it and forget it - continuous monitoring and processing.
# Option 1: Run in foreground
sooacette daemon --auto-implement --interval 1m
# Option 2: Run in background
nohup sooacette daemon --auto-implement --interval 1m > daemon.log 2>&1 &
# Option 3: Systemd service (recommended)
sudo systemctl start sooacette-daemonBenefits:
- 🕐 24/7 monitoring
- ⚡ Instant processing of new constats
- 📊 Automated analysis and implementation
- 🔄 Self-healing (restarts on errors)
🔍 Quality Assurance Workflow
Use for testing and QA processes.
# Morning: Process overnight constats
sooacette bulk --since "2025-10-16T00:00:00Z" --sequential
# Throughout day: Watch for new issues
sooacette watch --interval 5m
# Evening: Review and implement
sooacette implement-bulk --no-confirm🐛 Troubleshooting
For local config:
# Create secrets file
cp .sooacette.local.example .sooacette.local.json
# Edit and add your API key
nano .sooacette.local.jsonFor global config:
export SOOATEK_API_KEY="your-api-key-here"
# Add to shell profile for persistence
echo 'export SOOATEK_API_KEY="your-api-key"' >> ~/.bashrc
source ~/.bashrcProblem: You accidentally put your API key in .sooacette.json (versioned file)
Solution:
# 1. Remove API key from .sooacette.json
nano .sooacette.json
# Delete the "apiKey" field
# 2. Add it to .sooacette.local.json instead
nano .sooacette.local.json
{
"auth": {
"apiKey": "your-api-key-here"
}
}
# 3. If already committed, remove from git history
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch .sooacette.json' \
--prune-empty --tag-name-filter cat -- --allPrevention:
- Always use
.sooacette.local.jsonfor secrets - Add
.sooacette.local.jsonto.gitignore - Commit
.sooacette.local.exampleinstead
Problem: .sooacette.local.json is not in .gitignore
Solution:
# Add to .gitignore
echo ".sooacette.local.json" >> .gitignore
# Verify
grep "sooacette.local.json" .gitignoreSolution:
# Option 1: Initialize local config
cd /path/to/your/project
sooacette init
# Option 2: Use global config
sooacette run <constat-id> -p myproject
# Option 3: Create global config
mkdir -p ~/.sooacette
# Edit ~/.sooacette/config.json manuallySolution:
# Edit config
nano ~/.sooacette/config.json
# Set absolute path
{
"projects": {
"sooatek": {
"repoPath": "/home/user/projects/geslico"
}
}
}Causes:
- Incorrect API key
- Expired API key
- Wrong environment variable
Solution:
# Check current value
echo $SOOATEK_API_KEY
# Get new key from platform
# Update environment variableFor snap VSCode conflicts:
Sooacette automatically cleans snap environment variables. If still failing:
# Install gnome-terminal
sudo apt install gnome-terminal
# Or use different terminal
nano ~/.sooacette/config.json
# Set "terminal": { "linux": "konsole" }Solution:
# Install Windows Terminal from Microsoft Store
# Or update config to use PowerShell
{
"terminal": {
"windows": "powershell"
}
}Solution:
export HTTP_PROXY="http://proxy.company.com:8080"
export HTTPS_PROXY="http://proxy.company.com:8080"
export NO_PROXY="localhost,127.0.0.1"What it means:
- Jira export API returned
ok: truebut nojiraIssueKey - Constat may have been already exported
What happens:
- Sooacette checks if constat already has Jira info
- Falls back to using existing
jiraIssueKeyif found - Uses constat ID for filename if no Jira info available
Solution:
- Usually automatic (no action needed)
- Check
.recette/directory for created files - Check Jira platform for the ticket
Causes:
- Jira export failed or returned no
jiraIssueKey - API issue or rate limiting
What files look like:
.recette/U-R68fKqXLCtdp81u0KiJ.json (instead of GSL-123-Title.json)Solution:
- Files still work correctly (constat ID is used)
- Check Jira export logs for errors
- Verify API connectivity:
curl -H "Authorization: Bearer $SOOATEK_API_KEY" https://doc.geslico.sooatek.com/api/constats - Run with manual Jira check: Re-run
sooacette run <id>after fixing API issues
Possible causes:
- No Confluence credentials configured
- Invalid API token
- No Confluence URL in Jira description
- Network issues
Solution:
# Configure Confluence credentials
sooacette configure-confluence
# Verify configuration
cat ~/.sooacette/confluence.json
# Test connection manually
curl -u "[email protected]:api-token" \
https://your-domain.atlassian.net/wiki/api/v2/pages
# Check if Jira has Confluence URL
sooacette show <constat-id> --json | grep confluenceUrl
# Manual publish
sooacette publish-analysis <constat-id> -u <confluence-url>Error: "HTTP 400 - A page with this title already exists"
- This should not happen anymore (auto-versioning enabled)
- If it does, check Confluence API permissions
- Verify the page doesn't exist with exact same title
Error: "Confluence configuration not found"
# Run interactive setup
sooacette configure-confluence
# Or set environment variables
export CONFLUENCE_BASE_URL="https://your-domain.atlassian.net"
export CONFLUENCE_EMAIL="[email protected]"
export CONFLUENCE_API_TOKEN="your-token"What to check:
- File was created in
.recette/directory - File contains required sections
- Confluence credentials are configured
- Terminal output shows "Auto-publish watcher started"
Debug steps:
# Check if marker file exists (means already published)
ls -la .recette/.*published
# Check file completeness
grep "## 1. Résumé du problème" .recette/*-analyse.md
grep "## 3. Solution recommandée" .recette/*-analyse.md
# Manual publish to test
sooacette publish-analysis <constat-id>How the fallback works:
- Checks every 5 seconds for file
- Waits 30 seconds after file is complete
- Publishes if no
.${constat-id}-analysis.publishedmarker - Creates marker file after successful publish
Cause:
- Manual publication after auto-publish
- Running publish command multiple times
What happens:
- Auto-versioning creates "Title v2", "Title v3", etc.
- Each publication gets a unique title
Solution:
- Check marker files:
ls .recette/.*published - Delete marker to allow re-publishing:
rm .recette/.${id}-analysis.published - Archive old versions in Confluence manually
Prevention:
- Let auto-publish handle it automatically
- Only use manual commands for debugging
- Check marker files before re-publishing
🎓 Best Practices
✅ For Analysis
- Review before implementation - Always check analysis files
- Keep
mcp.mdupdated - Document available tools - Use descriptive constats - Better analysis from better input
- Check Confluence pages - Verify publications are formatted correctly
✨ Analysis Quality Improvements (v1.0.13 → v1.0.15)
Sooacette enforces strict quality rules with automatic validation:
🎯 Concision (Quantified - NEW v1.0.15)
- Résumé: MAX 50 words (objective metric)
- Cause: MAX 75 words with code citations
- Modification reason: MAX 15 words
- Risks: MAX 30 words or "None"
- Proportional to problem size
📋 Evidence Required (with examples)
- Format:
file.ext:123-145(mandatory) - ✅ GOOD: "Status never set to 'inactive' (
RepriseLicence.php:145)" - ❌ BAD: "The system doesn't handle affiliations correctly"
- No speculation without verification
🔍 Context Verification (Adaptive)
Always check:
- ✅
.env.localconfiguration
If problem involves:
- ✅ Data → Database (schema + test SQL query)
- ✅ Logic → Business code (services/controllers)
- ✅ Display → Templates/CSS
- ✅ API → Routes/endpoints
🎨 Adaptive Format (NEW v1.0.15)
- Simple problems (< 10 lines, 1 file): Condensed template
- Complex problems (multiple files or DB): Full structure
- Proportional structure to avoid over-documentation
✅ Auto-Validation (NEW v1.0.15)
7-point checklist before file creation:
- Summary ≤ 50 words
- All references use
file.ext:123-145format - At least 1 code citation in "Cause"
- Measurable/quantifiable impacts
- Before/after code (no prose)
- Tests with concrete data
- Modification reasons ≤ 15 words
Quality scoring (10 points):
- Goal: 10/10, Minimum: 8/10
- Self-regulation mechanism
🚫 Anti-Patterns (NEW v1.0.15)
Examples of what NOT to do:
- ❌ Verbose summaries
- ❌ Claims without evidence
- ❌ Vague impacts ("may cause issues")
- ❌ Prose instead of code
📊 Results (v1.0.15)
- ✅ Analyses 70% more concise (vs original)
- ✅ 100% factual with code references
- ✅ 8+ concrete examples in preprompt
- ✅ Objective metrics (word counts)
- ✅ Adaptive format (flexible but rigorous)
- ✅ Auto-validation (quality score 10/10)
- ✅ Quality +40% vs v1.0.14
Trade-off: Preprompt +37% longer (guidance examples) but analysis quality +40%
See AMELIORATIONS_QUALITE_ANALYSE.md for complete details.
✅ For Implementation
- Run tests after - Verify solution works
- Update analysis status - Keep documentation accurate
- Commit with references - Link to constat/Jira in commits
✅ For Daemon Mode
- Start with manual mode - Test workflow first
- Monitor logs initially - Catch issues early
- Use systemd for production - Better process management
- Set reasonable intervals - Avoid API rate limits (1m recommended)
- Enable auto-implement cautiously - Only after thorough testing
✅ For Confluence
- Run configure-confluence - Set up credentials once for all projects
- Check page hierarchy - Verify analysis and implementation are siblings
- Review auto-versioned pages - Check v2, v3 versions if re-analyzing
- Monitor fallback logs - Ensure auto-publish works if Claude forgets
- Link to Jira - Keep cross-references up to date
📊 Performance Metrics
| Metric | Manual Process | With Sooacette | Time Saved | |--------|---------------|----------------|------------| | Single analysis | 30-45 min | 5-10 min | ~35 min | | Batch (10 constats) | 5-7 hours | 1-2 hours | ~5 hours | | Daily monitoring | 2-3 hours | Automated | ~3 hours/day | | Jira ticket creation | 5 min | Automatic | 5 min/constat | | Confluence documentation | 10-15 min | Automatic | 15 min/constat |
Estimated productivity gain: 70-80%
🤝 Contributing
Contributions are welcome! Here's how you can help:
Development Setup
# Clone repository
git clone <repository>
cd sooacette
# Install dependencies
npm install
# Build
npm run build
# Run in development
npm run dev -- list
# Run tests
npm test
# Lint and format
npm run lint
npm run formatContribution Guidelines
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Code Style
- TypeScript for all source files
- ESLint + Prettier for formatting
- Descriptive commit messages
- Tests for new features
📜 License
MIT License - See LICENSE file for details
🙏 Credits
Built with love using:
- Commander.js - Elegant CLI framework
- Undici - High-performance HTTP client
- Chalk - Terminal colors and styling
- Claude Code - AI-powered development assistant
- TypeScript - Type-safe JavaScript
🌟 Star History
If you find this project useful, please consider giving it a star ⭐
Made with ❤️ by Florent, for Sooatek
