test: trigger pipeline
This commit is contained in:
282
CLAUDE.md
282
CLAUDE.md
@@ -4,7 +4,7 @@
|
||||
|
||||
Soleprint is a **development workflow platform** - a self-contained environment where you can run, test, and document everything in isolation. Born from the friction of working on small teams where testing required PRs, documentation was scattered, and quick API connectors took too long to set up.
|
||||
|
||||
**Core idea:** BDD → Gherkin → Backend/Frontend Tests, with reusable connectors and tools that work across projects.
|
||||
**Core idea:** BDD -> Gherkin -> Backend/Frontend Tests, with reusable connectors and tools that work across projects.
|
||||
|
||||
**Name:** Soleprint - "Cada paso deja huella" / "Each step leaves a mark"
|
||||
|
||||
@@ -15,91 +15,53 @@ spr/
|
||||
├── CLAUDE.md # You are here
|
||||
├── README.md # User-facing docs
|
||||
├── schema.json # Source of truth for models
|
||||
├── build.py # Build tool (dev/deploy)
|
||||
├── build.py # Build tool
|
||||
│
|
||||
├── cfg/ # Room configurations
|
||||
│ ├── soleprint.config.json # Framework model definitions
|
||||
│ ├── standalone/ # Base soleprint config
|
||||
│ │ ├── config.json # Framework branding/terminology
|
||||
│ │ └── data/ # Data files (veins.json, shunts.json, etc.)
|
||||
│ └── amar/ # AMAR room config
|
||||
│ ├── .env
|
||||
│ ├── config.json # Can rebrand (e.g., "pawprint")
|
||||
│ ├── data/ # Room-specific data files
|
||||
│ ├── .env.example
|
||||
│ ├── docker-compose.yml
|
||||
│ ├── Dockerfile.backend
|
||||
│ ├── Dockerfile.frontend
|
||||
│ ├── ctrl/ # Room-specific scripts
|
||||
│ ├── databrowse/depot/ # AMAR schema for databrowse
|
||||
│ ├── tester/tests/ # AMAR-specific tests
|
||||
│ ├── monitors/turnos/ # AMAR-specific monitors
|
||||
│ ├── models/ # AMAR models (pydantic, django, prisma)
|
||||
│ └── link/ # Databrowse adapter
|
||||
│ ├── soleprint/ # Soleprint Docker config for this room
|
||||
│ ├── databrowse/depot/
|
||||
│ ├── tester/tests/
|
||||
│ ├── monitors/
|
||||
│ └── models/
|
||||
│
|
||||
├── ctrl/ # Soleprint standalone ctrl (Docker)
|
||||
│ ├── build.sh # python build.py dev --cfg <room>
|
||||
│ ├── start.sh # docker compose up
|
||||
│ ├── stop.sh
|
||||
│ └── logs.sh
|
||||
├── ctrl/ # Build/run scripts
|
||||
│ ├── build.sh # ./build.sh [room]
|
||||
│ ├── start.sh # ./start.sh [room] [-d]
|
||||
│ ├── stop.sh # ./stop.sh [room]
|
||||
│ └── logs.sh # ./logs.sh [room]
|
||||
│
|
||||
├── artery/ # Vital connections
|
||||
│ ├── veins/ # Stateless API connectors
|
||||
│ │ ├── jira/
|
||||
│ │ ├── slack/
|
||||
│ │ ├── google/
|
||||
│ │ ├── base.py
|
||||
│ │ ├── oauth.py
|
||||
│ │ └── PATTERNS.md
|
||||
│ ├── veins/ # Stateless API connectors (jira, slack, google)
|
||||
│ ├── shunts/ # Fake connectors for testing
|
||||
│ │ └── example/
|
||||
│ ├── pulses/ # Composed: Vein + Room + Depot
|
||||
│ ├── plexuses/ # Full apps: backend + frontend + DB
|
||||
│ └── room/ # Base room templates
|
||||
│ └── plexus/ # Full apps: backend + frontend + DB
|
||||
│
|
||||
├── atlas/ # Documentation system
|
||||
│ ├── book/ # Gherkin samples, feature docs, arch diagrams
|
||||
│ ├── static/ # Prism syntax highlighting
|
||||
│ ├── main.py
|
||||
│ └── index.html
|
||||
│ └── books/ # Soleprint docs (external via depots)
|
||||
│
|
||||
├── station/ # Tools & execution
|
||||
│ ├── tools/
|
||||
│ │ ├── modelgen/ # Model generation
|
||||
│ │ ├── datagen/ # Test data generation
|
||||
│ │ ├── tester/ # BDD/playwright test runner
|
||||
│ │ ├── graphgen/ # Graph generation
|
||||
│ │ └── ...
|
||||
│ └── monitors/
|
||||
│ └── databrowse/ # SQL data browser (generic)
|
||||
│
|
||||
├── data/ # JSON content files
|
||||
│ ├── rooms.json
|
||||
│ ├── depots.json
|
||||
│ ├── veins.json
|
||||
│ └── ...
|
||||
│ ├── tools/ # modelgen, datagen, tester, sbwrapper
|
||||
│ └── monitors/ # databrowse
|
||||
│
|
||||
├── soleprint/ # Core entry points (versioned)
|
||||
│ ├── main.py # Multi-port entry
|
||||
│ ├── run.py # Single-port dev server
|
||||
│ ├── main.py
|
||||
│ ├── run.py
|
||||
│ ├── index.html
|
||||
│ ├── requirements.txt
|
||||
│ ├── Dockerfile
|
||||
│ └── dataloader/
|
||||
│
|
||||
├── gen/ # Built instance (gitignored)
|
||||
│ ├── ... (copies from soleprint/, artery/, atlas/, station/)
|
||||
│ ├── models/ # Generated by modelgen
|
||||
│ └── docker-compose.yml # For standalone Docker
|
||||
│
|
||||
└── mainroom/ # Orchestration: soleprint + managed room
|
||||
├── amar -> ../cfg/amar # Symlink to room config
|
||||
├── soleprint/ # Soleprint Docker config
|
||||
│ ├── docker-compose.yml
|
||||
│ └── docker-compose.nginx.yml
|
||||
├── sbwrapper/ # Sidebar wrapper UI
|
||||
│ ├── config.json
|
||||
│ ├── sidebar.js
|
||||
│ └── sidebar.css
|
||||
└── ctrl/ # Orchestration scripts
|
||||
├── start.sh # Start amar + soleprint
|
||||
├── stop.sh
|
||||
├── deploy.sh # Deploy to AWS
|
||||
└── server/ # AWS setup scripts
|
||||
└── gen/ # Built instances (gitignored)
|
||||
├── standalone/ # python build.py dev
|
||||
└── amar/ # python build.py dev --cfg amar
|
||||
```
|
||||
|
||||
## The Four Systems
|
||||
@@ -117,82 +79,71 @@ spr/
|
||||
Vein ──────► Pulse ──────► Plexus
|
||||
│ │ │
|
||||
│ │ └── Full app: backend + frontend + DB
|
||||
│ │ (e.g., WhatsApp with chat UI)
|
||||
│ │
|
||||
│ └── Composed: Vein + Room + Depot
|
||||
│ (e.g., Jira vein for specific project)
|
||||
│
|
||||
└── Stateless API connector
|
||||
(e.g., Jira, Slack, Google)
|
||||
|
||||
|
||||
Shunt ─── Fake connector for testing
|
||||
(e.g., mercadopago mock with UI to set responses)
|
||||
```
|
||||
|
||||
| Type | State | Frontend | Deploy |
|
||||
|------|-------|----------|--------|
|
||||
| Vein | None (or OAuth) | Optional test UI | With soleprint |
|
||||
| Shunt | Configurable responses | Config UI | With soleprint |
|
||||
| Pulse | Vein + config | Uses vein's | With soleprint |
|
||||
| Plexus | Full app state | Required | Self-contained |
|
||||
| Shunt | Configurable responses | Config UI | With soleprint |
|
||||
|
||||
## Key Concepts
|
||||
## Room Configuration
|
||||
|
||||
### Rooms
|
||||
A **Room** is an environment config with:
|
||||
- `ctrl/` folder with commands for that room
|
||||
- `.env` with paths and settings
|
||||
- Room-specific configs (databrowse depot, tester tests, monitors, models)
|
||||
Each room in `cfg/` has:
|
||||
- `config.json` - Framework branding/terminology (can rebrand soleprint)
|
||||
- `data/` - Data files (veins.json, shunts.json, depots.json, etc.)
|
||||
- Room-specific: databrowse depot, tester tests, monitors, models
|
||||
|
||||
### Mainroom
|
||||
Orchestrates soleprint + managed room together:
|
||||
- `mainroom/amar` → symlink to `cfg/amar`
|
||||
- `mainroom/soleprint/` → soleprint Docker config
|
||||
- `mainroom/sbwrapper/` → sidebar overlay for quick login, Jira info
|
||||
- `mainroom/ctrl/` → start/stop/deploy scripts
|
||||
Managed rooms (like amar) also have:
|
||||
- `docker-compose.yml` - Room's own services
|
||||
- `soleprint/` - Soleprint Docker config for this room
|
||||
- `.env.example` - Environment template
|
||||
|
||||
### Build & Gen
|
||||
- `soleprint/` = Versioned source
|
||||
- `gen/` = Built instance (gitignored, Docker-ready)
|
||||
- `python build.py dev --cfg amar` copies everything + room config
|
||||
## Build & Run
|
||||
|
||||
## Development Workflow
|
||||
|
||||
### Soleprint Standalone (no managed room)
|
||||
### Commands
|
||||
```bash
|
||||
# Build
|
||||
cd spr/
|
||||
python build.py dev
|
||||
python build.py dev # -> gen/standalone/
|
||||
python build.py dev --cfg amar # -> gen/amar/
|
||||
python build.py dev --all # -> both
|
||||
|
||||
# Run with Docker
|
||||
./ctrl/start.sh
|
||||
# Using ctrl scripts
|
||||
./ctrl/build.sh # Build standalone
|
||||
./ctrl/build.sh amar # Build amar
|
||||
./ctrl/build.sh --all # Build all
|
||||
|
||||
# Or bare-metal
|
||||
cd gen && .venv/bin/python run.py
|
||||
./ctrl/start.sh # Start standalone
|
||||
./ctrl/start.sh amar # Start amar
|
||||
./ctrl/start.sh amar -d # Detached
|
||||
./ctrl/stop.sh amar # Stop
|
||||
./ctrl/logs.sh amar # View logs
|
||||
|
||||
# Bare-metal dev
|
||||
cd gen/standalone && .venv/bin/python run.py
|
||||
```
|
||||
|
||||
### Soleprint + Amar (with managed room)
|
||||
### Adding a New Managed Room
|
||||
```bash
|
||||
# Build soleprint with amar config
|
||||
cd spr/
|
||||
python build.py dev --cfg amar
|
||||
# 1. Create room config
|
||||
mkdir -p cfg/clientx/data
|
||||
|
||||
# Create shared network
|
||||
docker network create soleprint_network
|
||||
# 2. Copy base config
|
||||
cp cfg/standalone/config.json cfg/clientx/
|
||||
cp -r cfg/standalone/data/* cfg/clientx/data/
|
||||
|
||||
# Start everything
|
||||
cd mainroom/ctrl
|
||||
./start.sh -d # Detached
|
||||
./start.sh # Foreground (logs)
|
||||
./stop.sh # Stop all
|
||||
```
|
||||
# 3. Customize as needed (shunts, depots, branding)
|
||||
|
||||
### Deploy to AWS
|
||||
```bash
|
||||
cd mainroom/ctrl
|
||||
./deploy.sh --dry-run # Preview
|
||||
./deploy.sh # Deploy
|
||||
# 4. Build and run
|
||||
python build.py dev --cfg clientx
|
||||
./ctrl/start.sh clientx
|
||||
```
|
||||
|
||||
## Ports
|
||||
@@ -200,110 +151,34 @@ cd mainroom/ctrl
|
||||
| Service | Port |
|
||||
|---------|------|
|
||||
| Soleprint | 12000 |
|
||||
| Artery | 12001 |
|
||||
| Atlas | 12002 |
|
||||
| Station | 12003 |
|
||||
| Amar Backend | 8000 |
|
||||
| Amar Frontend | 3000 |
|
||||
|
||||
## Tools
|
||||
|
||||
| Tool | Location | Status |
|
||||
|------|----------|--------|
|
||||
| modelgen | station/tools/modelgen | Working |
|
||||
| datagen | station/tools/datagen | Working |
|
||||
| tester | station/tools/tester | Advanced |
|
||||
| graphgen | station/tools/graphgen | WIP |
|
||||
|
||||
## Monitors
|
||||
|
||||
| Monitor | Location | Notes |
|
||||
|---------|----------|-------|
|
||||
| databrowse | station/monitors/databrowse | Generic SQL browser |
|
||||
| turnos | cfg/amar/monitors/turnos | AMAR-specific |
|
||||
|
||||
## Veins
|
||||
|
||||
| Vein | Location | Auth |
|
||||
|------|----------|------|
|
||||
| jira | artery/veins/jira | Token |
|
||||
| slack | artery/veins/slack | Token |
|
||||
| google | artery/veins/google | OAuth2 |
|
||||
|
||||
## Quick Reference
|
||||
|
||||
```bash
|
||||
# === Build ===
|
||||
python build.py dev # Soleprint only
|
||||
python build.py dev --cfg amar # With amar config
|
||||
python build.py deploy --output /path/ # Production build
|
||||
|
||||
# === Standalone (soleprint only) ===
|
||||
./ctrl/build.sh amar # Build with amar
|
||||
./ctrl/start.sh # Docker start
|
||||
./ctrl/stop.sh # Docker stop
|
||||
|
||||
# === With Managed Room (mainroom) ===
|
||||
cd mainroom/ctrl
|
||||
./start.sh -d # Start detached
|
||||
./start.sh amar # Start only amar
|
||||
./start.sh soleprint # Start only soleprint
|
||||
./stop.sh # Stop all
|
||||
./deploy.sh # Deploy to AWS
|
||||
|
||||
# === Bare-metal Dev ===
|
||||
cd gen
|
||||
.venv/bin/python run.py # Single-port dev server
|
||||
|
||||
# === Health Checks ===
|
||||
curl localhost:12000/health # Soleprint
|
||||
curl localhost:8000/health # Amar backend
|
||||
```
|
||||
| Tool | Location | Purpose |
|
||||
|------|----------|---------|
|
||||
| modelgen | station/tools/modelgen | Model generation |
|
||||
| datagen | station/tools/datagen | Test data generation |
|
||||
| tester | station/tools/tester | BDD/playwright test runner |
|
||||
| sbwrapper | station/tools/sbwrapper | Sidebar wrapper UI |
|
||||
| databrowse | station/monitors/databrowse | SQL data browser |
|
||||
|
||||
## Integration with ppl/ (Infrastructure)
|
||||
|
||||
The `ppl/` repo manages infrastructure alongside spr:
|
||||
|
||||
```
|
||||
wdir/
|
||||
├── spr/ # This repo (soleprint)
|
||||
├── ppl/ # Pipelines & infrastructure
|
||||
│ ├── ctrl/
|
||||
│ │ ├── deploy-gen.sh # Build spr + deploy via mainroom
|
||||
│ │ └── dns.sh # Route53 DNS management
|
||||
│ ├── ci/ # Woodpecker CI configs
|
||||
│ ├── gateway/ # Nginx/Caddy configs
|
||||
│ └── pipelines/ # CI/CD pipelines
|
||||
│ ├── pipelines/spr-standalone/ # CI/CD for standalone
|
||||
│ ├── pipelines/spr-managed/ # Manual deploy for rooms
|
||||
│ └── gateway/ # Nginx configs
|
||||
└── ama/ # Amar source code
|
||||
├── amar_django_back/
|
||||
└── amar_frontend/
|
||||
```
|
||||
|
||||
### Deploy from ppl/
|
||||
```bash
|
||||
cd ppl/ctrl
|
||||
./deploy-gen.sh # Build spr + deploy to AWS
|
||||
./deploy-gen.sh --dry-run # Preview
|
||||
./dns.sh add soleprint # Add soleprint.mcrn.ar DNS
|
||||
```
|
||||
|
||||
### Server Structure (mcrn.ar)
|
||||
```
|
||||
~/mainroom/ # Deployed mainroom
|
||||
├── amar/ # Amar Docker services
|
||||
├── soleprint/ # Soleprint Docker services
|
||||
└── ctrl/ # Server-side scripts
|
||||
|
||||
# Services run on:
|
||||
soleprint.mcrn.ar:12000 # Soleprint
|
||||
amar.mcrn.ar # Amar (nginx proxied)
|
||||
```
|
||||
|
||||
### Adding New Services
|
||||
1. Add DNS: `ppl/ctrl/dns.sh add <service>`
|
||||
2. Add nginx config in `ppl/gateway/`
|
||||
3. Add docker-compose in `mainroom/<service>/`
|
||||
4. Update `mainroom/ctrl/start.sh` if needed
|
||||
### Pipeline (standalone only)
|
||||
- git push -> woodpecker -> build gen/standalone/ -> docker push -> deploy
|
||||
- Managed rooms deploy manually (no pipeline for client code)
|
||||
|
||||
## External Paths
|
||||
|
||||
@@ -311,7 +186,6 @@ amar.mcrn.ar # Amar (nginx proxied)
|
||||
|------|------|
|
||||
| Amar Backend | /home/mariano/wdir/ama/amar_django_back |
|
||||
| Amar Frontend | /home/mariano/wdir/ama/amar_frontend |
|
||||
| Venv | /home/mariano/wdir/venv/spr |
|
||||
| Pipelines | /home/mariano/wdir/ppl |
|
||||
|
||||
## Files Ignored
|
||||
|
||||
Reference in New Issue
Block a user