From 96824fc08e791f91d54490099ac02528954b1804 Mon Sep 17 00:00:00 2001 From: anioko1 Date: Mon, 8 Jun 2026 18:50:30 +0100 Subject: [PATCH 1/2] docs: add animated terminal demo + correct README to match the Flask output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The README documented a FastAPI app (uvicorn, Pydantic, app/routers, alembic, openapi.yaml, ArchiMate typing), but microcodegen.py actually generates a Flask app (app factory, blueprints, flask-sqlalchemy, JWT httpOnly cookies, db.create_all, docker-compose Postgres). Every FastAPI claim was inaccurate. This rewrites the README so every claim matches what the tool really emits, verified by a real run. Adds: - demo.svg — animated terminal demo (PRD -> running Flask app -> register/CRUD), rendered from a real run, embedded inline at the top of the README - demo.cast — the asciinema v2 cast (reproducible; `asciinema upload demo.cast`) - demo.sh — one command that generates, boots, and walks the auth+CRUD flow Co-Authored-By: Claude Opus 4.8 --- .gitattributes | 3 + README.md | 125 ++++--- demo.cast | 943 +++++++++++++++++++++++++++++++++++++++++++++++++ demo.sh | 53 +++ demo.svg | 1 + 5 files changed, 1078 insertions(+), 47 deletions(-) create mode 100644 .gitattributes create mode 100644 demo.cast create mode 100644 demo.sh create mode 100644 demo.svg diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..0accd7d --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +*.sh text eol=lf +*.cast text eol=lf +*.svg text eol=lf diff --git a/README.md b/README.md index 998e848..06b7b90 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,42 @@ # microcodegen.py -**PRD text → production FastAPI app → ZIP bytes. One Python file, zero dependencies.** +**PRD text → a running Flask app → ZIP bytes. One Python file, zero dependencies.** Inspired by Andrej Karpathy's [micrograd](https://github.com/karpathy/micrograd) — this is the core Archiet algorithm in its simplest form. +[![microcodegen demo — PRD to a running Flask app](demo.svg)](https://archiet.com) + +> Every line of output above is from a real run. Reproduce it yourself in one command: [`./demo.sh`](demo.sh). + ```bash -python microcodegen.py your-prd.md --out ./myapp -cd myapp && pip install -r requirements.txt -alembic upgrade head -uvicorn main:app --reload +python microcodegen.py examples/task_manager.md --out ./my-task-app +cd my-task-app && cp .env.example .env +docker compose up # Flask + Postgres, healthcheck-gated +curl localhost:5000/api/health ``` -→ A **working, bootable FastAPI app** at `http://localhost:8000/docs`. +→ A **working, bootable Flask app** with JWT-cookie auth and per-tenant CRUD at `http://localhost:5000`. --- ## What it generates from your PRD -Given a plain-English Product Requirements Document, `microcodegen.py` outputs a complete FastAPI application: +Given a plain-English Product Requirements Document, `microcodegen.py` outputs a complete Flask application (25 files for the example PRD): -- **FastAPI** with `/docs` interactive OpenAPI explorer — free, auto-generated by FastAPI -- **SQLAlchemy 2.0 models** — one per entity extracted from your PRD (`DeclarativeBase`) -- **Pydantic v2 schemas** — `Base` / `Create` / `Update` / `Response` classes per entity -- **JWT auth** — `/api/auth/register`, `/api/auth/login`, `/api/auth/me` with httpOnly cookies; never localStorage -- **Full CRUD APIRouters** — list, create, get, update, delete per entity; all `Depends(get_current_user)` -- **Per-tenant data isolation** — every row has a `user_id` FK; every query filters by it; no cross-user leaks -- **Alembic migrations** — `alembic.ini` + `alembic/env.py` pre-configured; run `alembic upgrade head` -- **pytest test suite** — `TestClient` with `dependency_overrides`, auto-skips if Postgres unreachable -- **docker-compose.yml** — Postgres 16 with healthcheck-gated app startup -- **ARCHITECTURE.md** — ArchiMate 3.2 element map typed from the genome IR -- **openapi.yaml** — machine-readable API contract; import into Postman or Swagger UI +- **Flask app factory** (`app/__init__.py` → `create_app`) with a `wsgi.py`/gunicorn entrypoint — boots as-is +- **Flask-SQLAlchemy models** — one per entity extracted from your PRD, each with a `user_id` FK and `to_dict()` +- **JWT-cookie auth** — `/api/auth/register`, `/login`, `/logout`, `/me` via flask-jwt-extended; tokens live in **httpOnly cookies**, never localStorage +- **Full CRUD blueprints** — list, create, get, update, delete per entity; every route is `@jwt_required()` +- **Per-tenant data isolation** — every row has a `user_id`; every query is `filter_by(user_id=get_jwt_identity())`; no cross-user leaks. Writes go through a writable-field allowlist so a client can't spoof `user_id` +- **JSON error handlers** (400/401/404/405/500) so the API never returns HTML +- **CORS scoped to `FRONTEND_URL`** (not wildcard), with credentials support +- **A boot-time secret check** — `config.py` refuses to start if `SECRET_KEY`/`JWT_SECRET_KEY` are missing or still a `change-me` placeholder +- **docker-compose.yml** — Postgres 16 with a healthcheck-gated app start +- **A click-through demo page** (`app/static/index.html`) served at `/` — register/login/CRUD in the browser, no frontend to write +- **pytest suite** — Flask test client smoke tests +- **GENOME.json** — the architectural IR the app was rendered from -Zero LLM calls. Zero API keys. Pure Python stdlib. +Schema is created with `db.create_all()` on first boot — this minimal file ships no migrations (the full platform adds Alembic). Zero LLM calls. Zero API keys. Pure Python stdlib. --- @@ -44,11 +49,32 @@ cd microcodegen # Generate from an example PRD python microcodegen.py examples/task_manager.md --out ./my-task-app + +# Boot it (needs Docker for the bundled Postgres) cd my-task-app -pip install -r requirements.txt -alembic upgrade head -uvicorn main:app --reload -# → http://localhost:8000/docs +cp .env.example .env +docker compose up +# → http://localhost:5000 (and the API at /api/health) +``` + +End-to-end in three curls (register → create → list): + +```bash +curl -c cookies.txt -X POST localhost:5000/api/auth/register \ + -H 'Content-Type: application/json' \ + -d '{"email":"you@example.com","password":"hunter22hunter"}' + +curl -b cookies.txt -X POST localhost:5000/api/projects/ \ + -H 'Content-Type: application/json' \ + -d '{"name":"My first project"}' + +curl -b cookies.txt localhost:5000/api/projects/ +``` + +Or just run the whole thing — generate, boot, and walk the auth+CRUD flow: + +```bash +./demo.sh ``` Or pipe the ZIP: @@ -99,14 +125,14 @@ PRD text (your requirements document) │ No LLM. Misses subtle PRDs; that's acceptable for a spec reference. │ ▼ Stage 2: manifest_to_genome(manifest) → genome - │ Converts the manifest into a stack-neutral architectural genome dict. - │ Adds ArchiMate 3.2 element typing (ApplicationComponent, DataObject, - │ BusinessProcess, ApplicationService) for each extracted element. + │ Converts the manifest into a stack-neutral architectural genome dict — + │ the intermediate representation that drives rendering. One module per + │ entity, plus inferred integrations. │ ▼ Stage 3: render_genome(genome) → {path: content} - │ string.Template substitution over embedded FastAPI templates. - │ Outputs SQLAlchemy 2.0 models, Pydantic v2 schemas, APIRouters, - │ Alembic env, pytest suite, ARCHITECTURE.md, openapi.yaml. + │ string.Template substitution over embedded Flask templates. + │ Outputs the app factory, Flask-SQLAlchemy models, JWT-cookie auth, + │ CRUD blueprints, config, docker-compose, tests, and a demo page. │ ▼ Stage 4: pack(files) → ZIP bytes stdlib zipfile.ZipFile. Download it, push it to GitHub, deploy it. @@ -129,14 +155,16 @@ The same philosophy as [micrograd](https://github.com/karpathy/micrograd) and [m ## What this file does NOT include -This is the minimum viable PRD→code pipeline. Production use cases need more: +This is the minimum viable PRD→code pipeline: one stack (Flask), regex extraction, no quality gate. Production use cases need more: | Feature | Where it lives | |---|---| | LLM-powered PRD extraction (handles natural language) | [archiet.com](https://archiet.com) | -| **9 backend stacks**: NestJS, Django, Flask, Go (chi), Java Spring Boot, .NET, Laravel, Rails | [archiet.com](https://archiet.com) | +| **9 backend stacks**: FastAPI, NestJS, Django, Go (chi), Java Spring Boot, .NET, Laravel, Rails | [archiet.com](https://archiet.com) | | React/Next.js frontend (shadcn/ui, auth pages, onboarding) | [archiet.com](https://archiet.com) | | Expo mobile app (iOS + Android, push notifications) | [archiet.com](https://archiet.com) | +| Alembic migrations instead of `db.create_all` | [archiet.com](https://archiet.com) | +| ArchiMate 3.2 element map + ADR / TOGAF architecture docs | [archiet.com](https://archiet.com) | | Compliance artifact packs — SOC 2, HIPAA, GDPR, PCI-DSS control matrices | [archiet.com](https://archiet.com) | | 13-gate shippability audit (security scan, import coherence, boot test) | [archiet.com](https://archiet.com) | | GitHub push + drift detection + architecture scoring | [archiet.com](https://archiet.com) | @@ -161,32 +189,35 @@ The full Archiet pipeline replaces this with a chunked LLM extractor (overlap + ### Stage 2 — `manifest_to_genome(manifest) → genome` -Converts the manifest into a formal **architectural genome** — the stack-neutral intermediate representation that drives all downstream rendering. +Converts the manifest into a **genome** — the stack-neutral intermediate representation that drives all downstream rendering. The genome encodes: -- `language` — `fastapi` (this file's scope; the full system supports 12+ stacks) -- `modules[]` — one module per entity, with entities, user_stories, acceptance_criteria -- `archimate_elements[]` — every extracted element typed to ArchiMate 3.2 (ApplicationComponent for the app itself, DataObject per entity, BusinessProcess for workflow user stories, ApplicationService per integration) +- `language` — `flask` (this file's scope; the full system supports 9+ stacks) +- `modules[]` — one module per entity, with its fields and user stories - `integrations[]` — inferred from vendor mentions (Stripe, Auth0, SendGrid, etc.) +The full platform additionally types every element to ArchiMate 3.2 and threads it through governance and compliance — out of scope for this single file. + ### Stage 3 — `render_genome(genome) → {path: content}` `string.Template` substitution across templates embedded directly in the file. Each template is a complete source file with `$variable` placeholders. -Templates emitted for every generated app: +Files emitted for every generated app: -- `main.py` — FastAPI entry point with `include_router` wiring (no `create_all` — Alembic owns the schema) -- `app/database.py` — SQLAlchemy 2.0 `DeclarativeBase` + `get_db` dependency -- `app/auth.py` — JWT via PyJWT + passlib/bcrypt, httpOnly cookie, `get_current_user` dependency -- `app/models/user.py` — User model -- `alembic.ini` + `alembic/env.py` — migration environment with model auto-discovery -- `ARCHITECTURE.md` — ArchiMate 3.2 element table -- `openapi.yaml` — full OpenAPI 3.1 spec +- `wsgi.py` — gunicorn entrypoint (`from app import create_app`) +- `app/__init__.py` — the Flask app factory: blueprint wiring, JWTManager, CORS, JSON error handlers, `db.create_all()` on boot +- `app/database.py` — the Flask-SQLAlchemy `db` instance +- `app/blueprints/auth_bp.py` — register / login / logout / me, JWT in httpOnly cookies +- `app/models/user.py` — User model with password hashing +- `config.py` — env-driven config that refuses to boot on placeholder secrets +- `docker-compose.yml` + `Dockerfile` — Postgres 16 + gunicorn, healthcheck-gated +- `app/static/index.html` — a single-page register/login/CRUD demo +- `tests/` — pytest + Flask test client +- `.env.example`, `requirements.txt`, `README.md`, `GENOME.json` Per entity: -- `app/models/.py` — SQLAlchemy 2.0 model with `user_id` FK -- `app/schemas/.py` — Pydantic v2 `Base` / `Create` / `Update` / `Response` -- `app/routers/.py` — FastAPI `APIRouter` with full CRUD +- `app/models/.py` — Flask-SQLAlchemy model with a `user_id` FK and `to_dict()` +- `app/blueprints/_bp.py` — full CRUD blueprint, all routes `@jwt_required()`, per-tenant scoped ### Stage 4 — `pack(files) → bytes` @@ -218,4 +249,4 @@ If the former, open a PR. If the latter, it belongs in the full Archiet pipeline MIT. Use it, fork it, learn from it. -The production platform (12+ stacks, compliance packs, quality gates, GitHub push) is commercial: **[archiet.com](https://archiet.com)** +The production platform (9+ stacks, compliance packs, quality gates, GitHub push) is commercial: **[archiet.com](https://archiet.com)** diff --git a/demo.cast b/demo.cast new file mode 100644 index 0000000..00629a1 --- /dev/null +++ b/demo.cast @@ -0,0 +1,943 @@ +{"version": 2, "width": 100, "height": 25, "timestamp": 1700000000, "env": {"TERM": "xterm-256color", "SHELL": "/bin/bash"}, "title": "microcodegen.py \u2014 PRD \u2192 running app"} +[0.4, "o", "\u001b[32m$\u001b[0m "] +[0.4, "o", "\u001b"] +[0.416, "o", "["] +[0.432, "o", "9"] +[0.448, "o", "0"] +[0.464, "o", "m"] +[0.48, "o", "#"] +[0.496, "o", " "] +[0.512, "o", "1"] +[0.528, "o", "."] +[0.544, "o", " "] +[0.56, "o", "G"] +[0.576, "o", "e"] +[0.592, "o", "n"] +[0.608, "o", "e"] +[0.624, "o", "r"] +[0.64, "o", "a"] +[0.656, "o", "t"] +[0.672, "o", "e"] +[0.688, "o", " "] +[0.704, "o", "a"] +[0.72, "o", " "] +[0.736, "o", "F"] +[0.752, "o", "l"] +[0.768, "o", "a"] +[0.784, "o", "s"] +[0.8, "o", "k"] +[0.816, "o", " "] +[0.832, "o", "+"] +[0.848, "o", " "] +[0.864, "o", "P"] +[0.88, "o", "o"] +[0.896, "o", "s"] +[0.912, "o", "t"] +[0.928, "o", "g"] +[0.944, "o", "r"] +[0.96, "o", "e"] +[0.976, "o", "s"] +[0.992, "o", " "] +[1.008, "o", "a"] +[1.024, "o", "p"] +[1.04, "o", "p"] +[1.056, "o", " "] +[1.072, "o", "f"] +[1.088, "o", "r"] +[1.104, "o", "o"] +[1.12, "o", "m"] +[1.136, "o", " "] +[1.152, "o", "a"] +[1.168, "o", " "] +[1.184, "o", "p"] +[1.2, "o", "l"] +[1.216, "o", "a"] +[1.232, "o", "i"] +[1.248, "o", "n"] +[1.264, "o", "-"] +[1.28, "o", "E"] +[1.296, "o", "n"] +[1.312, "o", "g"] +[1.328, "o", "l"] +[1.344, "o", "i"] +[1.36, "o", "s"] +[1.376, "o", "h"] +[1.392, "o", " "] +[1.408, "o", "P"] +[1.424, "o", "R"] +[1.44, "o", "D"] +[1.456, "o", "\u001b"] +[1.472, "o", "["] +[1.488, "o", "0"] +[1.504, "o", "m"] +[1.52, "o", "\r\n"] +[1.87, "o", "\u001b[32m$\u001b[0m "] +[1.87, "o", "\u001b"] +[1.898, "o", "["] +[1.926, "o", "3"] +[1.954, "o", "6"] +[1.982, "o", "m"] +[2.01, "o", "p"] +[2.038, "o", "y"] +[2.066, "o", "t"] +[2.094, "o", "h"] +[2.122, "o", "o"] +[2.15, "o", "n"] +[2.178, "o", " "] +[2.206, "o", "m"] +[2.234, "o", "i"] +[2.262, "o", "c"] +[2.29, "o", "r"] +[2.318, "o", "o"] +[2.346, "o", "c"] +[2.374, "o", "o"] +[2.402, "o", "d"] +[2.43, "o", "e"] +[2.458, "o", "g"] +[2.486, "o", "e"] +[2.514, "o", "n"] +[2.542, "o", "."] +[2.57, "o", "p"] +[2.598, "o", "y"] +[2.626, "o", " "] +[2.654, "o", "e"] +[2.682, "o", "x"] +[2.71, "o", "a"] +[2.738, "o", "m"] +[2.766, "o", "p"] +[2.794, "o", "l"] +[2.822, "o", "e"] +[2.85, "o", "s"] +[2.878, "o", "/"] +[2.906, "o", "t"] +[2.934, "o", "a"] +[2.962, "o", "s"] +[2.99, "o", "k"] +[3.018, "o", "_"] +[3.046, "o", "m"] +[3.074, "o", "a"] +[3.102, "o", "n"] +[3.13, "o", "a"] +[3.158, "o", "g"] +[3.186, "o", "e"] +[3.214, "o", "r"] +[3.242, "o", "."] +[3.27, "o", "m"] +[3.298, "o", "d"] +[3.326, "o", " "] +[3.354, "o", "-"] +[3.382, "o", "-"] +[3.41, "o", "o"] +[3.438, "o", "u"] +[3.466, "o", "t"] +[3.494, "o", " "] +[3.522, "o", "."] +[3.55, "o", "/"] +[3.578, "o", "m"] +[3.606, "o", "y"] +[3.634, "o", "-"] +[3.662, "o", "t"] +[3.69, "o", "a"] +[3.718, "o", "s"] +[3.746, "o", "k"] +[3.774, "o", "-"] +[3.802, "o", "a"] +[3.83, "o", "p"] +[3.858, "o", "p"] +[3.886, "o", "\u001b"] +[3.914, "o", "["] +[3.942, "o", "0"] +[3.97, "o", "m"] +[3.998, "o", "\r\n"] +[4.348, "o", "Wrote 25 files to my-task-app\r\n"] +[5.238, "o", "\u001b[32m$\u001b[0m "] +[5.238, "o", "\u001b"] +[5.254, "o", "["] +[5.27, "o", "9"] +[5.286, "o", "0"] +[5.302, "o", "m"] +[5.318, "o", "#"] +[5.334, "o", " "] +[5.35, "o", "2"] +[5.366, "o", "."] +[5.382, "o", " "] +[5.398, "o", "B"] +[5.414, "o", "o"] +[5.43, "o", "o"] +[5.446, "o", "t"] +[5.462, "o", " "] +[5.478, "o", "i"] +[5.494, "o", "t"] +[5.51, "o", " "] +[5.526, "o", "—"] +[5.542, "o", " "] +[5.558, "o", "h"] +[5.574, "o", "e"] +[5.59, "o", "a"] +[5.606, "o", "l"] +[5.622, "o", "t"] +[5.638, "o", "h"] +[5.654, "o", "c"] +[5.67, "o", "h"] +[5.686, "o", "e"] +[5.702, "o", "c"] +[5.718, "o", "k"] +[5.734, "o", "-"] +[5.75, "o", "g"] +[5.766, "o", "a"] +[5.782, "o", "t"] +[5.798, "o", "e"] +[5.814, "o", "d"] +[5.83, "o", ","] +[5.846, "o", " "] +[5.862, "o", "z"] +[5.878, "o", "e"] +[5.894, "o", "r"] +[5.91, "o", "o"] +[5.926, "o", " "] +[5.942, "o", "e"] +[5.958, "o", "d"] +[5.974, "o", "i"] +[5.99, "o", "t"] +[6.006, "o", "s"] +[6.022, "o", ","] +[6.038, "o", " "] +[6.054, "o", "z"] +[6.07, "o", "e"] +[6.086, "o", "r"] +[6.102, "o", "o"] +[6.118, "o", " "] +[6.134, "o", "A"] +[6.15, "o", "P"] +[6.166, "o", "I"] +[6.182, "o", " "] +[6.198, "o", "k"] +[6.214, "o", "e"] +[6.23, "o", "y"] +[6.246, "o", "s"] +[6.262, "o", "\u001b"] +[6.278, "o", "["] +[6.294, "o", "0"] +[6.31, "o", "m"] +[6.326, "o", "\r\n"] +[6.676, "o", "\u001b[32m$\u001b[0m "] +[6.676, "o", "\u001b"] +[6.704, "o", "["] +[6.732, "o", "3"] +[6.76, "o", "6"] +[6.788, "o", "m"] +[6.816, "o", "c"] +[6.844, "o", "d"] +[6.872, "o", " "] +[6.9, "o", "m"] +[6.928, "o", "y"] +[6.956, "o", "-"] +[6.984, "o", "t"] +[7.012, "o", "a"] +[7.04, "o", "s"] +[7.068, "o", "k"] +[7.096, "o", "-"] +[7.124, "o", "a"] +[7.152, "o", "p"] +[7.18, "o", "p"] +[7.208, "o", " "] +[7.236, "o", "&"] +[7.264, "o", "&"] +[7.292, "o", " "] +[7.32, "o", "d"] +[7.348, "o", "o"] +[7.376, "o", "c"] +[7.404, "o", "k"] +[7.432, "o", "e"] +[7.46, "o", "r"] +[7.488, "o", " "] +[7.516, "o", "c"] +[7.544, "o", "o"] +[7.572, "o", "m"] +[7.6, "o", "p"] +[7.628, "o", "o"] +[7.656, "o", "s"] +[7.684, "o", "e"] +[7.712, "o", " "] +[7.74, "o", "u"] +[7.768, "o", "p"] +[7.796, "o", " "] +[7.824, "o", "-"] +[7.852, "o", "d"] +[7.88, "o", " "] +[7.908, "o", "-"] +[7.936, "o", "-"] +[7.964, "o", "b"] +[7.992, "o", "u"] +[8.02, "o", "i"] +[8.048, "o", "l"] +[8.076, "o", "d"] +[8.104, "o", "\u001b"] +[8.132, "o", "["] +[8.16, "o", "0"] +[8.188, "o", "m"] +[8.216, "o", "\r\n"] +[8.566, "o", "\u001b[32m ✔ Container my-task-app-db-1 Healthy\u001b[0m\r\n"] +[8.606, "o", "\u001b[32m ✔ Container my-task-app-app-1 Started\u001b[0m\r\n"] +[9.496, "o", "\u001b[32m$\u001b[0m "] +[9.496, "o", "\u001b"] +[9.512, "o", "["] +[9.528, "o", "9"] +[9.544, "o", "0"] +[9.56, "o", "m"] +[9.576, "o", "#"] +[9.592, "o", " "] +[9.608, "o", "3"] +[9.624, "o", "."] +[9.64, "o", " "] +[9.656, "o", "I"] +[9.672, "o", "t"] +[9.688, "o", "'"] +[9.704, "o", "s"] +[9.72, "o", " "] +[9.736, "o", "l"] +[9.752, "o", "i"] +[9.768, "o", "v"] +[9.784, "o", "e"] +[9.8, "o", "\u001b"] +[9.816, "o", "["] +[9.832, "o", "0"] +[9.848, "o", "m"] +[9.864, "o", "\r\n"] +[10.214, "o", "\u001b[32m$\u001b[0m "] +[10.214, "o", "\u001b"] +[10.242, "o", "["] +[10.27, "o", "3"] +[10.298, "o", "6"] +[10.326, "o", "m"] +[10.354, "o", "c"] +[10.382, "o", "u"] +[10.41, "o", "r"] +[10.438, "o", "l"] +[10.466, "o", " "] +[10.494, "o", "l"] +[10.522, "o", "o"] +[10.55, "o", "c"] +[10.578, "o", "a"] +[10.606, "o", "l"] +[10.634, "o", "h"] +[10.662, "o", "o"] +[10.69, "o", "s"] +[10.718, "o", "t"] +[10.746, "o", ":"] +[10.774, "o", "5"] +[10.802, "o", "0"] +[10.83, "o", "0"] +[10.858, "o", "0"] +[10.886, "o", "/"] +[10.914, "o", "a"] +[10.942, "o", "p"] +[10.97, "o", "i"] +[10.998, "o", "/"] +[11.026, "o", "h"] +[11.054, "o", "e"] +[11.082, "o", "a"] +[11.11, "o", "l"] +[11.138, "o", "t"] +[11.166, "o", "h"] +[11.194, "o", "\u001b"] +[11.222, "o", "["] +[11.25, "o", "0"] +[11.278, "o", "m"] +[11.306, "o", "\r\n"] +[11.656, "o", "{\"status\":\"ok\",\"version\":\"task_manager_saa_s\"}\r\n"] +[12.546, "o", "\u001b[32m$\u001b[0m "] +[12.546, "o", "\u001b"] +[12.562, "o", "["] +[12.578, "o", "9"] +[12.594, "o", "0"] +[12.61, "o", "m"] +[12.626, "o", "#"] +[12.642, "o", " "] +[12.658, "o", "R"] +[12.674, "o", "e"] +[12.69, "o", "g"] +[12.706, "o", "i"] +[12.722, "o", "s"] +[12.738, "o", "t"] +[12.754, "o", "e"] +[12.77, "o", "r"] +[12.786, "o", " "] +[12.802, "o", "—"] +[12.818, "o", " "] +[12.834, "o", "i"] +[12.85, "o", "s"] +[12.866, "o", "s"] +[12.882, "o", "u"] +[12.898, "o", "e"] +[12.914, "o", "s"] +[12.93, "o", " "] +[12.946, "o", "a"] +[12.962, "o", " "] +[12.978, "o", "J"] +[12.994, "o", "W"] +[13.01, "o", "T"] +[13.026, "o", " "] +[13.042, "o", "i"] +[13.058, "o", "n"] +[13.074, "o", " "] +[13.09, "o", "a"] +[13.106, "o", "n"] +[13.122, "o", " "] +[13.138, "o", "h"] +[13.154, "o", "t"] +[13.17, "o", "t"] +[13.186, "o", "p"] +[13.202, "o", "O"] +[13.218, "o", "n"] +[13.234, "o", "l"] +[13.25, "o", "y"] +[13.266, "o", " "] +[13.282, "o", "c"] +[13.298, "o", "o"] +[13.314, "o", "o"] +[13.33, "o", "k"] +[13.346, "o", "i"] +[13.362, "o", "e"] +[13.378, "o", " "] +[13.394, "o", "("] +[13.41, "o", "n"] +[13.426, "o", "e"] +[13.442, "o", "v"] +[13.458, "o", "e"] +[13.474, "o", "r"] +[13.49, "o", " "] +[13.506, "o", "l"] +[13.522, "o", "o"] +[13.538, "o", "c"] +[13.554, "o", "a"] +[13.57, "o", "l"] +[13.586, "o", "S"] +[13.602, "o", "t"] +[13.618, "o", "o"] +[13.634, "o", "r"] +[13.65, "o", "a"] +[13.666, "o", "g"] +[13.682, "o", "e"] +[13.698, "o", ")"] +[13.714, "o", "\u001b"] +[13.73, "o", "["] +[13.746, "o", "0"] +[13.762, "o", "m"] +[13.778, "o", "\r\n"] +[14.128, "o", "\u001b[32m$\u001b[0m "] +[14.128, "o", "\u001b"] +[14.156, "o", "["] +[14.184, "o", "3"] +[14.212, "o", "6"] +[14.24, "o", "m"] +[14.268, "o", "c"] +[14.296, "o", "u"] +[14.324, "o", "r"] +[14.352, "o", "l"] +[14.38, "o", " "] +[14.408, "o", "-"] +[14.436, "o", "c"] +[14.464, "o", " "] +[14.492, "o", "c"] +[14.52, "o", "o"] +[14.548, "o", "o"] +[14.576, "o", "k"] +[14.604, "o", "i"] +[14.632, "o", "e"] +[14.66, "o", "s"] +[14.688, "o", "."] +[14.716, "o", "t"] +[14.744, "o", "x"] +[14.772, "o", "t"] +[14.8, "o", " "] +[14.828, "o", "-"] +[14.856, "o", "X"] +[14.884, "o", " "] +[14.912, "o", "P"] +[14.94, "o", "O"] +[14.968, "o", "S"] +[14.996, "o", "T"] +[15.024, "o", " "] +[15.052, "o", "l"] +[15.08, "o", "o"] +[15.108, "o", "c"] +[15.136, "o", "a"] +[15.164, "o", "l"] +[15.192, "o", "h"] +[15.22, "o", "o"] +[15.248, "o", "s"] +[15.276, "o", "t"] +[15.304, "o", ":"] +[15.332, "o", "5"] +[15.36, "o", "0"] +[15.388, "o", "0"] +[15.416, "o", "0"] +[15.444, "o", "/"] +[15.472, "o", "a"] +[15.5, "o", "p"] +[15.528, "o", "i"] +[15.556, "o", "/"] +[15.584, "o", "a"] +[15.612, "o", "u"] +[15.64, "o", "t"] +[15.668, "o", "h"] +[15.696, "o", "/"] +[15.724, "o", "r"] +[15.752, "o", "e"] +[15.78, "o", "g"] +[15.808, "o", "i"] +[15.836, "o", "s"] +[15.864, "o", "t"] +[15.892, "o", "e"] +[15.92, "o", "r"] +[15.948, "o", " "] +[15.976, "o", "\\"] +[16.004, "o", "\u001b"] +[16.032, "o", "["] +[16.06, "o", "0"] +[16.088, "o", "m"] +[16.116, "o", "\r\n"] +[16.466, "o", "\u001b"] +[16.494, "o", "["] +[16.522, "o", "3"] +[16.55, "o", "6"] +[16.578, "o", "m"] +[16.606, "o", " "] +[16.634, "o", " "] +[16.662, "o", " "] +[16.69, "o", " "] +[16.718, "o", " "] +[16.746, "o", "-"] +[16.774, "o", "d"] +[16.802, "o", " "] +[16.83, "o", "'"] +[16.858, "o", "{"] +[16.886, "o", "\""] +[16.914, "o", "e"] +[16.942, "o", "m"] +[16.97, "o", "a"] +[16.998, "o", "i"] +[17.026, "o", "l"] +[17.054, "o", "\""] +[17.082, "o", ":"] +[17.11, "o", "\""] +[17.138, "o", "y"] +[17.166, "o", "o"] +[17.194, "o", "u"] +[17.222, "o", "@"] +[17.25, "o", "e"] +[17.278, "o", "x"] +[17.306, "o", "a"] +[17.334, "o", "m"] +[17.362, "o", "p"] +[17.39, "o", "l"] +[17.418, "o", "e"] +[17.446, "o", "."] +[17.474, "o", "c"] +[17.502, "o", "o"] +[17.53, "o", "m"] +[17.558, "o", "\""] +[17.586, "o", ","] +[17.614, "o", "\""] +[17.642, "o", "p"] +[17.67, "o", "a"] +[17.698, "o", "s"] +[17.726, "o", "s"] +[17.754, "o", "w"] +[17.782, "o", "o"] +[17.81, "o", "r"] +[17.838, "o", "d"] +[17.866, "o", "\""] +[17.894, "o", ":"] +[17.922, "o", "\""] +[17.95, "o", "h"] +[17.978, "o", "u"] +[18.006, "o", "n"] +[18.034, "o", "t"] +[18.062, "o", "e"] +[18.09, "o", "r"] +[18.118, "o", "2"] +[18.146, "o", "2"] +[18.174, "o", "h"] +[18.202, "o", "u"] +[18.23, "o", "n"] +[18.258, "o", "t"] +[18.286, "o", "e"] +[18.314, "o", "r"] +[18.342, "o", "\""] +[18.37, "o", "}"] +[18.398, "o", "'"] +[18.426, "o", "\u001b"] +[18.454, "o", "["] +[18.482, "o", "0"] +[18.51, "o", "m"] +[18.538, "o", "\r\n"] +[18.888, "o", "{\"user\":{\"email\":\"you@example.com\",\"id\":\"c3f365ce-dd75-47c1-a26b-9b0fe928369c\"}}\r\n"] +[19.778, "o", "\u001b[32m$\u001b[0m "] +[19.778, "o", "\u001b"] +[19.794, "o", "["] +[19.81, "o", "9"] +[19.826, "o", "0"] +[19.842, "o", "m"] +[19.858, "o", "#"] +[19.874, "o", " "] +[19.89, "o", "C"] +[19.906, "o", "r"] +[19.922, "o", "e"] +[19.938, "o", "a"] +[19.954, "o", "t"] +[19.97, "o", "e"] +[19.986, "o", " "] +[20.002, "o", "a"] +[20.018, "o", " "] +[20.034, "o", "p"] +[20.05, "o", "r"] +[20.066, "o", "o"] +[20.082, "o", "j"] +[20.098, "o", "e"] +[20.114, "o", "c"] +[20.13, "o", "t"] +[20.146, "o", " "] +[20.162, "o", "—"] +[20.178, "o", " "] +[20.194, "o", "a"] +[20.21, "o", "u"] +[20.226, "o", "t"] +[20.242, "o", "h"] +[20.258, "o", " "] +[20.274, "o", "r"] +[20.29, "o", "e"] +[20.306, "o", "q"] +[20.322, "o", "u"] +[20.338, "o", "i"] +[20.354, "o", "r"] +[20.37, "o", "e"] +[20.386, "o", "d"] +[20.402, "o", ","] +[20.418, "o", " "] +[20.434, "o", "r"] +[20.45, "o", "o"] +[20.466, "o", "w"] +[20.482, "o", " "] +[20.498, "o", "s"] +[20.514, "o", "c"] +[20.53, "o", "o"] +[20.546, "o", "p"] +[20.562, "o", "e"] +[20.578, "o", "d"] +[20.594, "o", " "] +[20.61, "o", "t"] +[20.626, "o", "o"] +[20.642, "o", " "] +[20.658, "o", "t"] +[20.674, "o", "h"] +[20.69, "o", "i"] +[20.706, "o", "s"] +[20.722, "o", " "] +[20.738, "o", "u"] +[20.754, "o", "s"] +[20.77, "o", "e"] +[20.786, "o", "r"] +[20.802, "o", "\u001b"] +[20.818, "o", "["] +[20.834, "o", "0"] +[20.85, "o", "m"] +[20.866, "o", "\r\n"] +[21.216, "o", "\u001b[32m$\u001b[0m "] +[21.216, "o", "\u001b"] +[21.244, "o", "["] +[21.272, "o", "3"] +[21.3, "o", "6"] +[21.328, "o", "m"] +[21.356, "o", "c"] +[21.384, "o", "u"] +[21.412, "o", "r"] +[21.44, "o", "l"] +[21.468, "o", " "] +[21.496, "o", "-"] +[21.524, "o", "b"] +[21.552, "o", " "] +[21.58, "o", "c"] +[21.608, "o", "o"] +[21.636, "o", "o"] +[21.664, "o", "k"] +[21.692, "o", "i"] +[21.72, "o", "e"] +[21.748, "o", "s"] +[21.776, "o", "."] +[21.804, "o", "t"] +[21.832, "o", "x"] +[21.86, "o", "t"] +[21.888, "o", " "] +[21.916, "o", "-"] +[21.944, "o", "X"] +[21.972, "o", " "] +[22.0, "o", "P"] +[22.028, "o", "O"] +[22.056, "o", "S"] +[22.084, "o", "T"] +[22.112, "o", " "] +[22.14, "o", "l"] +[22.168, "o", "o"] +[22.196, "o", "c"] +[22.224, "o", "a"] +[22.252, "o", "l"] +[22.28, "o", "h"] +[22.308, "o", "o"] +[22.336, "o", "s"] +[22.364, "o", "t"] +[22.392, "o", ":"] +[22.42, "o", "5"] +[22.448, "o", "0"] +[22.476, "o", "0"] +[22.504, "o", "0"] +[22.532, "o", "/"] +[22.56, "o", "a"] +[22.588, "o", "p"] +[22.616, "o", "i"] +[22.644, "o", "/"] +[22.672, "o", "p"] +[22.7, "o", "r"] +[22.728, "o", "o"] +[22.756, "o", "j"] +[22.784, "o", "e"] +[22.812, "o", "c"] +[22.84, "o", "t"] +[22.868, "o", "s"] +[22.896, "o", "/"] +[22.924, "o", " "] +[22.952, "o", "-"] +[22.98, "o", "d"] +[23.008, "o", " "] +[23.036, "o", "'"] +[23.064, "o", "{"] +[23.092, "o", "\""] +[23.12, "o", "n"] +[23.148, "o", "a"] +[23.176, "o", "m"] +[23.204, "o", "e"] +[23.232, "o", "\""] +[23.26, "o", ":"] +[23.288, "o", "\""] +[23.316, "o", "M"] +[23.344, "o", "y"] +[23.372, "o", " "] +[23.4, "o", "f"] +[23.428, "o", "i"] +[23.456, "o", "r"] +[23.484, "o", "s"] +[23.512, "o", "t"] +[23.54, "o", " "] +[23.568, "o", "p"] +[23.596, "o", "r"] +[23.624, "o", "o"] +[23.652, "o", "j"] +[23.68, "o", "e"] +[23.708, "o", "c"] +[23.736, "o", "t"] +[23.764, "o", "\""] +[23.792, "o", "}"] +[23.82, "o", "'"] +[23.848, "o", "\u001b"] +[23.876, "o", "["] +[23.904, "o", "0"] +[23.932, "o", "m"] +[23.96, "o", "\r\n"] +[24.31, "o", "{\"id\":\"d2d14b5c-8026-421a-b027-cdc0b6c5ae63\",\"name\":\"My first project\",\r\n"] +[24.35, "o", " \"user_id\":\"c3f365ce-dd75-47c1-a26b-9b0fe928369c\",\"status\":null,\"description\":null,\"color\":null}\r\n"] +[25.24, "o", "\u001b[32m$\u001b[0m "] +[25.24, "o", "\u001b"] +[25.256, "o", "["] +[25.272, "o", "9"] +[25.288, "o", "0"] +[25.304, "o", "m"] +[25.32, "o", "#"] +[25.336, "o", " "] +[25.352, "o", "L"] +[25.368, "o", "i"] +[25.384, "o", "s"] +[25.4, "o", "t"] +[25.416, "o", " "] +[25.432, "o", "—"] +[25.448, "o", " "] +[25.464, "o", "r"] +[25.48, "o", "e"] +[25.496, "o", "t"] +[25.512, "o", "u"] +[25.528, "o", "r"] +[25.544, "o", "n"] +[25.56, "o", "s"] +[25.576, "o", " "] +[25.592, "o", "o"] +[25.608, "o", "n"] +[25.624, "o", "l"] +[25.64, "o", "y"] +[25.656, "o", " "] +[25.672, "o", "y"] +[25.688, "o", "o"] +[25.704, "o", "u"] +[25.72, "o", "r"] +[25.736, "o", " "] +[25.752, "o", "r"] +[25.768, "o", "o"] +[25.784, "o", "w"] +[25.8, "o", "s"] +[25.816, "o", "\u001b"] +[25.832, "o", "["] +[25.848, "o", "0"] +[25.864, "o", "m"] +[25.88, "o", "\r\n"] +[26.23, "o", "\u001b[32m$\u001b[0m "] +[26.23, "o", "\u001b"] +[26.258, "o", "["] +[26.286, "o", "3"] +[26.314, "o", "6"] +[26.342, "o", "m"] +[26.37, "o", "c"] +[26.398, "o", "u"] +[26.426, "o", "r"] +[26.454, "o", "l"] +[26.482, "o", " "] +[26.51, "o", "-"] +[26.538, "o", "b"] +[26.566, "o", " "] +[26.594, "o", "c"] +[26.622, "o", "o"] +[26.65, "o", "o"] +[26.678, "o", "k"] +[26.706, "o", "i"] +[26.734, "o", "e"] +[26.762, "o", "s"] +[26.79, "o", "."] +[26.818, "o", "t"] +[26.846, "o", "x"] +[26.874, "o", "t"] +[26.902, "o", " "] +[26.93, "o", "l"] +[26.958, "o", "o"] +[26.986, "o", "c"] +[27.014, "o", "a"] +[27.042, "o", "l"] +[27.07, "o", "h"] +[27.098, "o", "o"] +[27.126, "o", "s"] +[27.154, "o", "t"] +[27.182, "o", ":"] +[27.21, "o", "5"] +[27.238, "o", "0"] +[27.266, "o", "0"] +[27.294, "o", "0"] +[27.322, "o", "/"] +[27.35, "o", "a"] +[27.378, "o", "p"] +[27.406, "o", "i"] +[27.434, "o", "/"] +[27.462, "o", "p"] +[27.49, "o", "r"] +[27.518, "o", "o"] +[27.546, "o", "j"] +[27.574, "o", "e"] +[27.602, "o", "c"] +[27.63, "o", "t"] +[27.658, "o", "s"] +[27.686, "o", "/"] +[27.714, "o", "\u001b"] +[27.742, "o", "["] +[27.77, "o", "0"] +[27.798, "o", "m"] +[27.826, "o", "\r\n"] +[28.176, "o", "[{\"id\":\"d2d14b5c-8026-421a-b027-cdc0b6c5ae63\",\"name\":\"My first project\",\"user_id\":\"c3f365ce-...\"}]\r\n"] +[29.066, "o", "\u001b[32m$\u001b[0m "] +[29.066, "o", "\u001b"] +[29.082, "o", "["] +[29.098, "o", "9"] +[29.114, "o", "0"] +[29.13, "o", "m"] +[29.146, "o", "#"] +[29.162, "o", " "] +[29.178, "o", "W"] +[29.194, "o", "i"] +[29.21, "o", "t"] +[29.226, "o", "h"] +[29.242, "o", "o"] +[29.258, "o", "u"] +[29.274, "o", "t"] +[29.29, "o", " "] +[29.306, "o", "t"] +[29.322, "o", "h"] +[29.338, "o", "e"] +[29.354, "o", " "] +[29.37, "o", "c"] +[29.386, "o", "o"] +[29.402, "o", "o"] +[29.418, "o", "k"] +[29.434, "o", "i"] +[29.45, "o", "e"] +[29.466, "o", ","] +[29.482, "o", " "] +[29.498, "o", "t"] +[29.514, "o", "h"] +[29.53, "o", "e"] +[29.546, "o", " "] +[29.562, "o", "A"] +[29.578, "o", "P"] +[29.594, "o", "I"] +[29.61, "o", " "] +[29.626, "o", "r"] +[29.642, "o", "e"] +[29.658, "o", "f"] +[29.674, "o", "u"] +[29.69, "o", "s"] +[29.706, "o", "e"] +[29.722, "o", "s"] +[29.738, "o", "\u001b"] +[29.754, "o", "["] +[29.77, "o", "0"] +[29.786, "o", "m"] +[29.802, "o", "\r\n"] +[30.152, "o", "\u001b[32m$\u001b[0m "] +[30.152, "o", "\u001b"] +[30.18, "o", "["] +[30.208, "o", "3"] +[30.236, "o", "6"] +[30.264, "o", "m"] +[30.292, "o", "c"] +[30.32, "o", "u"] +[30.348, "o", "r"] +[30.376, "o", "l"] +[30.404, "o", " "] +[30.432, "o", "l"] +[30.46, "o", "o"] +[30.488, "o", "c"] +[30.516, "o", "a"] +[30.544, "o", "l"] +[30.572, "o", "h"] +[30.6, "o", "o"] +[30.628, "o", "s"] +[30.656, "o", "t"] +[30.684, "o", ":"] +[30.712, "o", "5"] +[30.74, "o", "0"] +[30.768, "o", "0"] +[30.796, "o", "0"] +[30.824, "o", "/"] +[30.852, "o", "a"] +[30.88, "o", "p"] +[30.908, "o", "i"] +[30.936, "o", "/"] +[30.964, "o", "p"] +[30.992, "o", "r"] +[31.02, "o", "o"] +[31.048, "o", "j"] +[31.076, "o", "e"] +[31.104, "o", "c"] +[31.132, "o", "t"] +[31.16, "o", "s"] +[31.188, "o", "/"] +[31.216, "o", "\u001b"] +[31.244, "o", "["] +[31.272, "o", "0"] +[31.3, "o", "m"] +[31.328, "o", "\r\n"] +[31.678, "o", "\u001b[33m{\"msg\":\"Missing cookie \\\"access_token_cookie\\\"\"}\u001b[0m\r\n"] diff --git a/demo.sh b/demo.sh new file mode 100644 index 0000000..ee3067b --- /dev/null +++ b/demo.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +# +# microcodegen demo — PRD text → a running Flask app, end to end. +# +# Requires: python 3.10+, docker (for the Postgres-backed boot), curl. +# Usage: ./demo.sh [path/to/prd.md] (defaults to examples/task_manager.md) +# +set -euo pipefail + +PRD="${1:-examples/task_manager.md}" +OUT="./my-task-app" + +echo "# 1. Generate a Flask + Postgres app from a plain-English PRD" +python microcodegen.py "$PRD" --out "$OUT" + +echo +echo "# 2. Boot it — Flask + Postgres, healthcheck-gated, zero edits, zero API keys" +cd "$OUT" +[ -f .env ] || cp .env.example .env +docker compose up -d --build + +echo +echo "# waiting for the app to come up..." +until curl -fs http://localhost:5000/api/health >/dev/null; do sleep 1; done + +echo +echo "# 3. It's live" +echo "\$ curl localhost:5000/api/health" +curl -s http://localhost:5000/api/health; echo + +echo +echo "# Register — issues a JWT in an httpOnly cookie (never localStorage)" +curl -s -c cookies.txt -X POST http://localhost:5000/api/auth/register \ + -H 'Content-Type: application/json' \ + -d '{"email":"you@example.com","password":"hunter22hunter"}'; echo + +echo +echo "# Create a project — auth required, row scoped to this user" +curl -s -b cookies.txt -X POST http://localhost:5000/api/projects/ \ + -H 'Content-Type: application/json' \ + -d '{"name":"My first project"}'; echo + +echo +echo "# List — returns only your rows" +curl -s -b cookies.txt http://localhost:5000/api/projects/; echo + +echo +echo "# Without the cookie, the API refuses" +curl -s http://localhost:5000/api/projects/; echo + +echo +echo "# Done. Open http://localhost:5000 for the click-through demo page." +echo "# Tear down with: cd $OUT && docker compose down -v" diff --git a/demo.svg b/demo.svg new file mode 100644 index 0000000..00ad63f --- /dev/null +++ b/demo.svg @@ -0,0 +1 @@ +$$#$#1.$#1.Generate$#1.Generatea$#1.GenerateaFlask$#1.GenerateaFlask+$#1.GenerateaFlask+Postgres$#1.GenerateaFlask+Postgresapp$#1.GenerateaFlask+Postgresappfrom$#1.GenerateaFlask+Postgresappfroma$#1.GenerateaFlask+Postgresappfromaplain-English$#1.GenerateaFlask+Postgresappfromaplain-EnglishPRD$python$pythonmicrocodegen.py$pythonmicrocodegen.pyexamples/task_manager.md$pythonmicrocodegen.pyexamples/task_manager.md--out$pythonmicrocodegen.pyexamples/task_manager.md--out./my-task-appWrote25filestomy-task-app$#2.$#2.Boot$#2.Bootit$#2.Bootit$#2.Bootithealthcheck-gated,$#2.Bootithealthcheck-gated,zero$#2.Bootithealthcheck-gated,zeroedits,$#2.Bootithealthcheck-gated,zeroedits,zero$#2.Bootithealthcheck-gated,zeroedits,zeroAPI$#2.Bootithealthcheck-gated,zeroedits,zeroAPIkeys$c$cd$cdmy-task-app$cdmy-task-app&&$cdmy-task-app&&docker$cdmy-task-app&&dockercompose$cdmy-task-app&&dockercomposeup$cdmy-task-app&&dockercomposeup-d$cdmy-task-app&&dockercomposeup-d--buildContainermy-task-app-db-1HealthyContainermy-task-app-app-1Started$#3.$#3.It's$#3.It'slive$cu$cur$curl$curll$curllo$curlloc$curlloca$curllocal$curllocalh$curllocalho$curllocalhos$curllocalhost$curllocalhost:$curllocalhost:5$curllocalhost:50$curllocalhost:500$curllocalhost:5000$curllocalhost:5000/$curllocalhost:5000/a$curllocalhost:5000/ap$curllocalhost:5000/api$curllocalhost:5000/api/$curllocalhost:5000/api/health{"status":"ok","version":"task_manager_saa_s"}$#Register$#Register$#Registerissues$#Registerissuesa$#RegisterissuesaJWT$#RegisterissuesaJWTin$#RegisterissuesaJWTinan$#RegisterissuesaJWTinanhttpOnly$#RegisterissuesaJWTinanhttpOnlycookie$#RegisterissuesaJWTinanhttpOnlycookie(never$#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStorage)$curl-$curl-c$curl-ccookies.txt$curl-ccookies.txt-X$curl-ccookies.txt-XPOST$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/register$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/register\-d-d'{"email":"you@example.com","password":"hunter22hunter"}'{"user":{"email":"you@example.com","id":"c3f365ce-dd75-47c1-a26b-9b0fe928369c"}}$#Create$#Createa$#Createaproject$#Createaproject$#Createaprojectauth$#Createaprojectauthrequired,$#Createaprojectauthrequired,row$#Createaprojectauthrequired,rowscoped$#Createaprojectauthrequired,rowscopedto$#Createaprojectauthrequired,rowscopedtothis$#Createaprojectauthrequired,rowscopedtothisuser$curl-b$curl-bc$curl-bco$curl-bcoo$curl-bcook$curl-bcooki$curl-bcookie$curl-bcookies$curl-bcookies.$curl-bcookies.t$curl-bcookies.tx$curl-bcookies.txt$curl-bcookies.txt-X$curl-bcookies.txt-XPOST$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"My$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirst$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstproject"}'{"id":"d2d14b5c-8026-421a-b027-cdc0b6c5ae63","name":"Myfirstproject","user_id":"c3f365ce-dd75-47c1-a26b-9b0fe928369c","status":null,"description":null,"color":null}$#List$#List$#Listreturns$#Listreturnsonly$#Listreturnsonlyyour$#Listreturnsonlyyourrows$curl-bcookies.txtlocalhost:5000/api/projects/[{"id":"d2d14b5c-8026-421a-b027-cdc0b6c5ae63","name":"Myfirstproject","user_id":"c3f365ce-..."}]$#Without$#Withoutthe$#Withoutthecookie,$#Withoutthecookie,the$#Withoutthecookie,theAPI$#Withoutthecookie,theAPIrefuses$curllocalhost:5000/api/projects/$#1$#1.G$#1.Ge$#1.Gen$#1.Gene$#1.Gener$#1.Genera$#1.Generat$#1.GenerateaF$#1.GenerateaFl$#1.GenerateaFla$#1.GenerateaFlas$#1.GenerateaFlask+P$#1.GenerateaFlask+Po$#1.GenerateaFlask+Pos$#1.GenerateaFlask+Post$#1.GenerateaFlask+Postg$#1.GenerateaFlask+Postgr$#1.GenerateaFlask+Postgre$#1.GenerateaFlask+Postgresa$#1.GenerateaFlask+Postgresap$#1.GenerateaFlask+Postgresappf$#1.GenerateaFlask+Postgresappfr$#1.GenerateaFlask+Postgresappfro$#1.GenerateaFlask+Postgresappfromap$#1.GenerateaFlask+Postgresappfromapl$#1.GenerateaFlask+Postgresappfromapla$#1.GenerateaFlask+Postgresappfromaplai$#1.GenerateaFlask+Postgresappfromaplain$#1.GenerateaFlask+Postgresappfromaplain-$#1.GenerateaFlask+Postgresappfromaplain-E$#1.GenerateaFlask+Postgresappfromaplain-En$#1.GenerateaFlask+Postgresappfromaplain-Eng$#1.GenerateaFlask+Postgresappfromaplain-Engl$#1.GenerateaFlask+Postgresappfromaplain-Engli$#1.GenerateaFlask+Postgresappfromaplain-Englis$#1.GenerateaFlask+Postgresappfromaplain-EnglishP$#1.GenerateaFlask+Postgresappfromaplain-EnglishPR$p$py$pyt$pyth$pytho$pythonm$pythonmi$pythonmic$pythonmicr$pythonmicro$pythonmicroc$pythonmicroco$pythonmicrocod$pythonmicrocode$pythonmicrocodeg$pythonmicrocodege$pythonmicrocodegen$pythonmicrocodegen.$pythonmicrocodegen.p$pythonmicrocodegen.pye$pythonmicrocodegen.pyex$pythonmicrocodegen.pyexa$pythonmicrocodegen.pyexam$pythonmicrocodegen.pyexamp$pythonmicrocodegen.pyexampl$pythonmicrocodegen.pyexample$pythonmicrocodegen.pyexamples$pythonmicrocodegen.pyexamples/$pythonmicrocodegen.pyexamples/t$pythonmicrocodegen.pyexamples/ta$pythonmicrocodegen.pyexamples/tas$pythonmicrocodegen.pyexamples/task$pythonmicrocodegen.pyexamples/task_$pythonmicrocodegen.pyexamples/task_m$pythonmicrocodegen.pyexamples/task_ma$pythonmicrocodegen.pyexamples/task_man$pythonmicrocodegen.pyexamples/task_mana$pythonmicrocodegen.pyexamples/task_manag$pythonmicrocodegen.pyexamples/task_manage$pythonmicrocodegen.pyexamples/task_manager$pythonmicrocodegen.pyexamples/task_manager.$pythonmicrocodegen.pyexamples/task_manager.m$pythonmicrocodegen.pyexamples/task_manager.md-$pythonmicrocodegen.pyexamples/task_manager.md--$pythonmicrocodegen.pyexamples/task_manager.md--o$pythonmicrocodegen.pyexamples/task_manager.md--ou$pythonmicrocodegen.pyexamples/task_manager.md--out.$pythonmicrocodegen.pyexamples/task_manager.md--out./$pythonmicrocodegen.pyexamples/task_manager.md--out./m$pythonmicrocodegen.pyexamples/task_manager.md--out./my$pythonmicrocodegen.pyexamples/task_manager.md--out./my-$pythonmicrocodegen.pyexamples/task_manager.md--out./my-t$pythonmicrocodegen.pyexamples/task_manager.md--out./my-ta$pythonmicrocodegen.pyexamples/task_manager.md--out./my-tas$pythonmicrocodegen.pyexamples/task_manager.md--out./my-task$pythonmicrocodegen.pyexamples/task_manager.md--out./my-task-$pythonmicrocodegen.pyexamples/task_manager.md--out./my-task-a$pythonmicrocodegen.pyexamples/task_manager.md--out./my-task-ap$#2$#2.B$#2.Bo$#2.Boo$#2.Booti$#2.Bootith$#2.Bootithe$#2.Bootithea$#2.Bootitheal$#2.Bootithealt$#2.Bootithealth$#2.Bootithealthc$#2.Bootithealthch$#2.Bootithealthche$#2.Bootithealthchec$#2.Bootithealthcheck$#2.Bootithealthcheck-$#2.Bootithealthcheck-g$#2.Bootithealthcheck-ga$#2.Bootithealthcheck-gat$#2.Bootithealthcheck-gate$#2.Bootithealthcheck-gated$#2.Bootithealthcheck-gated,z$#2.Bootithealthcheck-gated,ze$#2.Bootithealthcheck-gated,zer$#2.Bootithealthcheck-gated,zeroe$#2.Bootithealthcheck-gated,zeroed$#2.Bootithealthcheck-gated,zeroedi$#2.Bootithealthcheck-gated,zeroedit$#2.Bootithealthcheck-gated,zeroedits$#2.Bootithealthcheck-gated,zeroedits,z$#2.Bootithealthcheck-gated,zeroedits,ze$#2.Bootithealthcheck-gated,zeroedits,zer$#2.Bootithealthcheck-gated,zeroedits,zeroA$#2.Bootithealthcheck-gated,zeroedits,zeroAP$#2.Bootithealthcheck-gated,zeroedits,zeroAPIk$#2.Bootithealthcheck-gated,zeroedits,zeroAPIke$#2.Bootithealthcheck-gated,zeroedits,zeroAPIkey$cdm$cdmy$cdmy-$cdmy-t$cdmy-ta$cdmy-tas$cdmy-task$cdmy-task-$cdmy-task-a$cdmy-task-ap$cdmy-task-app&$cdmy-task-app&&d$cdmy-task-app&&do$cdmy-task-app&&doc$cdmy-task-app&&dock$cdmy-task-app&&docke$cdmy-task-app&&dockerc$cdmy-task-app&&dockerco$cdmy-task-app&&dockercom$cdmy-task-app&&dockercomp$cdmy-task-app&&dockercompo$cdmy-task-app&&dockercompos$cdmy-task-app&&dockercomposeu$cdmy-task-app&&dockercomposeup-$cdmy-task-app&&dockercomposeup-d-$cdmy-task-app&&dockercomposeup-d--$cdmy-task-app&&dockercomposeup-d--b$cdmy-task-app&&dockercomposeup-d--bu$cdmy-task-app&&dockercomposeup-d--bui$cdmy-task-app&&dockercomposeup-d--buil$#3$#3.I$#3.It$#3.It'$#3.It'sl$#3.It'sli$#3.It'sliv$curllocalhost:5000/api/h$curllocalhost:5000/api/he$curllocalhost:5000/api/hea$curllocalhost:5000/api/heal$curllocalhost:5000/api/healt$#R$#Re$#Reg$#Regi$#Regis$#Regist$#Registe$#Registeri$#Registeris$#Registeriss$#Registerissu$#Registerissue$#RegisterissuesaJ$#RegisterissuesaJW$#RegisterissuesaJWTi$#RegisterissuesaJWTina$#RegisterissuesaJWTinanh$#RegisterissuesaJWTinanht$#RegisterissuesaJWTinanhtt$#RegisterissuesaJWTinanhttp$#RegisterissuesaJWTinanhttpO$#RegisterissuesaJWTinanhttpOn$#RegisterissuesaJWTinanhttpOnl$#RegisterissuesaJWTinanhttpOnlyc$#RegisterissuesaJWTinanhttpOnlyco$#RegisterissuesaJWTinanhttpOnlycoo$#RegisterissuesaJWTinanhttpOnlycook$#RegisterissuesaJWTinanhttpOnlycooki$#RegisterissuesaJWTinanhttpOnlycookie($#RegisterissuesaJWTinanhttpOnlycookie(n$#RegisterissuesaJWTinanhttpOnlycookie(ne$#RegisterissuesaJWTinanhttpOnlycookie(nev$#RegisterissuesaJWTinanhttpOnlycookie(neve$#RegisterissuesaJWTinanhttpOnlycookie(neverl$#RegisterissuesaJWTinanhttpOnlycookie(neverlo$#RegisterissuesaJWTinanhttpOnlycookie(neverloc$#RegisterissuesaJWTinanhttpOnlycookie(neverloca$#RegisterissuesaJWTinanhttpOnlycookie(neverlocal$#RegisterissuesaJWTinanhttpOnlycookie(neverlocalS$#RegisterissuesaJWTinanhttpOnlycookie(neverlocalSt$#RegisterissuesaJWTinanhttpOnlycookie(neverlocalSto$#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStor$#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStora$#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStorag$#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStorage$curl-cc$curl-cco$curl-ccoo$curl-ccook$curl-ccooki$curl-ccookie$curl-ccookies$curl-ccookies.$curl-ccookies.t$curl-ccookies.tx$curl-ccookies.txt-$curl-ccookies.txt-XP$curl-ccookies.txt-XPO$curl-ccookies.txt-XPOS$curl-ccookies.txt-XPOSTl$curl-ccookies.txt-XPOSTlo$curl-ccookies.txt-XPOSTloc$curl-ccookies.txt-XPOSTloca$curl-ccookies.txt-XPOSTlocal$curl-ccookies.txt-XPOSTlocalh$curl-ccookies.txt-XPOSTlocalho$curl-ccookies.txt-XPOSTlocalhos$curl-ccookies.txt-XPOSTlocalhost$curl-ccookies.txt-XPOSTlocalhost:$curl-ccookies.txt-XPOSTlocalhost:5$curl-ccookies.txt-XPOSTlocalhost:50$curl-ccookies.txt-XPOSTlocalhost:500$curl-ccookies.txt-XPOSTlocalhost:5000$curl-ccookies.txt-XPOSTlocalhost:5000/$curl-ccookies.txt-XPOSTlocalhost:5000/a$curl-ccookies.txt-XPOSTlocalhost:5000/ap$curl-ccookies.txt-XPOSTlocalhost:5000/api$curl-ccookies.txt-XPOSTlocalhost:5000/api/$curl-ccookies.txt-XPOSTlocalhost:5000/api/a$curl-ccookies.txt-XPOSTlocalhost:5000/api/au$curl-ccookies.txt-XPOSTlocalhost:5000/api/aut$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/r$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/re$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/reg$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/regi$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/regis$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/regist$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/registe--d'-d'{-d'{"-d'{"e-d'{"em-d'{"ema-d'{"emai-d'{"email-d'{"email"-d'{"email":-d'{"email":"-d'{"email":"y-d'{"email":"yo-d'{"email":"you-d'{"email":"you@-d'{"email":"you@e-d'{"email":"you@ex-d'{"email":"you@exa-d'{"email":"you@exam-d'{"email":"you@examp-d'{"email":"you@exampl-d'{"email":"you@example-d'{"email":"you@example.-d'{"email":"you@example.c-d'{"email":"you@example.co-d'{"email":"you@example.com-d'{"email":"you@example.com"-d'{"email":"you@example.com",-d'{"email":"you@example.com","-d'{"email":"you@example.com","p-d'{"email":"you@example.com","pa-d'{"email":"you@example.com","pas-d'{"email":"you@example.com","pass-d'{"email":"you@example.com","passw-d'{"email":"you@example.com","passwo-d'{"email":"you@example.com","passwor-d'{"email":"you@example.com","password-d'{"email":"you@example.com","password"-d'{"email":"you@example.com","password":-d'{"email":"you@example.com","password":"-d'{"email":"you@example.com","password":"h-d'{"email":"you@example.com","password":"hu-d'{"email":"you@example.com","password":"hun-d'{"email":"you@example.com","password":"hunt-d'{"email":"you@example.com","password":"hunte-d'{"email":"you@example.com","password":"hunter-d'{"email":"you@example.com","password":"hunter2-d'{"email":"you@example.com","password":"hunter22-d'{"email":"you@example.com","password":"hunter22h-d'{"email":"you@example.com","password":"hunter22hu-d'{"email":"you@example.com","password":"hunter22hun-d'{"email":"you@example.com","password":"hunter22hunt-d'{"email":"you@example.com","password":"hunter22hunte-d'{"email":"you@example.com","password":"hunter22hunter-d'{"email":"you@example.com","password":"hunter22hunter"-d'{"email":"you@example.com","password":"hunter22hunter"}$#C$#Cr$#Cre$#Crea$#Creat$#Createap$#Createapr$#Createapro$#Createaproj$#Createaproje$#Createaprojec$#Createaprojecta$#Createaprojectau$#Createaprojectaut$#Createaprojectauthr$#Createaprojectauthre$#Createaprojectauthreq$#Createaprojectauthrequ$#Createaprojectauthrequi$#Createaprojectauthrequir$#Createaprojectauthrequire$#Createaprojectauthrequired$#Createaprojectauthrequired,r$#Createaprojectauthrequired,ro$#Createaprojectauthrequired,rows$#Createaprojectauthrequired,rowsc$#Createaprojectauthrequired,rowsco$#Createaprojectauthrequired,rowscop$#Createaprojectauthrequired,rowscope$#Createaprojectauthrequired,rowscopedt$#Createaprojectauthrequired,rowscopedtot$#Createaprojectauthrequired,rowscopedtoth$#Createaprojectauthrequired,rowscopedtothi$#Createaprojectauthrequired,rowscopedtothisu$#Createaprojectauthrequired,rowscopedtothisus$#Createaprojectauthrequired,rowscopedtothisuse$curl-bcookies.txt-$curl-bcookies.txt-XP$curl-bcookies.txt-XPO$curl-bcookies.txt-XPOS$curl-bcookies.txt-XPOSTl$curl-bcookies.txt-XPOSTlo$curl-bcookies.txt-XPOSTloc$curl-bcookies.txt-XPOSTloca$curl-bcookies.txt-XPOSTlocal$curl-bcookies.txt-XPOSTlocalh$curl-bcookies.txt-XPOSTlocalho$curl-bcookies.txt-XPOSTlocalhos$curl-bcookies.txt-XPOSTlocalhost$curl-bcookies.txt-XPOSTlocalhost:$curl-bcookies.txt-XPOSTlocalhost:5$curl-bcookies.txt-XPOSTlocalhost:50$curl-bcookies.txt-XPOSTlocalhost:500$curl-bcookies.txt-XPOSTlocalhost:5000$curl-bcookies.txt-XPOSTlocalhost:5000/$curl-bcookies.txt-XPOSTlocalhost:5000/a$curl-bcookies.txt-XPOSTlocalhost:5000/ap$curl-bcookies.txt-XPOSTlocalhost:5000/api$curl-bcookies.txt-XPOSTlocalhost:5000/api/$curl-bcookies.txt-XPOSTlocalhost:5000/api/p$curl-bcookies.txt-XPOSTlocalhost:5000/api/pr$curl-bcookies.txt-XPOSTlocalhost:5000/api/pro$curl-bcookies.txt-XPOSTlocalhost:5000/api/proj$curl-bcookies.txt-XPOSTlocalhost:5000/api/proje$curl-bcookies.txt-XPOSTlocalhost:5000/api/projec$curl-bcookies.txt-XPOSTlocalhost:5000/api/project$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"n$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"na$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"nam$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name"$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"M$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myf$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfi$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfir$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirs$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstp$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstpr$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstpro$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstproj$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstproje$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstprojec$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstproject$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstproject"$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstproject"}$#L$#Li$#Lis$#Listr$#Listre$#Listret$#Listretu$#Listretur$#Listreturn$#Listreturnso$#Listreturnson$#Listreturnsonl$#Listreturnsonlyy$#Listreturnsonlyyo$#Listreturnsonlyyou$#Listreturnsonlyyourr$#Listreturnsonlyyourro$#Listreturnsonlyyourrow$curl-bcookies.txtl$curl-bcookies.txtlo$curl-bcookies.txtloc$curl-bcookies.txtloca$curl-bcookies.txtlocal$curl-bcookies.txtlocalh$curl-bcookies.txtlocalho$curl-bcookies.txtlocalhos$curl-bcookies.txtlocalhost$curl-bcookies.txtlocalhost:$curl-bcookies.txtlocalhost:5$curl-bcookies.txtlocalhost:50$curl-bcookies.txtlocalhost:500$curl-bcookies.txtlocalhost:5000$curl-bcookies.txtlocalhost:5000/$curl-bcookies.txtlocalhost:5000/a$curl-bcookies.txtlocalhost:5000/ap$curl-bcookies.txtlocalhost:5000/api$curl-bcookies.txtlocalhost:5000/api/$curl-bcookies.txtlocalhost:5000/api/p$curl-bcookies.txtlocalhost:5000/api/pr$curl-bcookies.txtlocalhost:5000/api/pro$curl-bcookies.txtlocalhost:5000/api/proj$curl-bcookies.txtlocalhost:5000/api/proje$curl-bcookies.txtlocalhost:5000/api/projec$curl-bcookies.txtlocalhost:5000/api/project$curl-bcookies.txtlocalhost:5000/api/projects$#W$#Wi$#Wit$#With$#Witho$#Withou$#Withoutt$#Withoutth$#Withoutthec$#Withouttheco$#Withoutthecoo$#Withoutthecook$#Withoutthecooki$#Withoutthecookie$#Withoutthecookie,t$#Withoutthecookie,th$#Withoutthecookie,theA$#Withoutthecookie,theAP$#Withoutthecookie,theAPIr$#Withoutthecookie,theAPIre$#Withoutthecookie,theAPIref$#Withoutthecookie,theAPIrefu$#Withoutthecookie,theAPIrefus$#Withoutthecookie,theAPIrefuse$curllocalhost:5000/api/p$curllocalhost:5000/api/pr$curllocalhost:5000/api/pro$curllocalhost:5000/api/proj$curllocalhost:5000/api/proje$curllocalhost:5000/api/projec$curllocalhost:5000/api/project$curllocalhost:5000/api/projects{"msg":"Missingcookie\"access_token_cookie\""} \ No newline at end of file From bf199cd67bcb9d39cb7605176c640f3f49f9e3e2 Mon Sep 17 00:00:00 2001 From: anioko1 Date: Mon, 8 Jun 2026 19:07:41 +0100 Subject: [PATCH 2/2] demo: show the generated file tree in the animation (entity-specific files, not a skeleton) Co-Authored-By: Claude Opus 4.8 --- demo.cast | 1967 ++++++++++++++++++++++++++++------------------------- demo.svg | 2 +- 2 files changed, 1026 insertions(+), 943 deletions(-) diff --git a/demo.cast b/demo.cast index 00629a1..cdf0aad 100644 --- a/demo.cast +++ b/demo.cast @@ -1,943 +1,1026 @@ -{"version": 2, "width": 100, "height": 25, "timestamp": 1700000000, "env": {"TERM": "xterm-256color", "SHELL": "/bin/bash"}, "title": "microcodegen.py \u2014 PRD \u2192 running app"} -[0.4, "o", "\u001b[32m$\u001b[0m "] -[0.4, "o", "\u001b"] -[0.416, "o", "["] -[0.432, "o", "9"] -[0.448, "o", "0"] -[0.464, "o", "m"] -[0.48, "o", "#"] -[0.496, "o", " "] -[0.512, "o", "1"] -[0.528, "o", "."] -[0.544, "o", " "] -[0.56, "o", "G"] -[0.576, "o", "e"] -[0.592, "o", "n"] -[0.608, "o", "e"] -[0.624, "o", "r"] -[0.64, "o", "a"] -[0.656, "o", "t"] -[0.672, "o", "e"] -[0.688, "o", " "] -[0.704, "o", "a"] -[0.72, "o", " "] -[0.736, "o", "F"] -[0.752, "o", "l"] -[0.768, "o", "a"] -[0.784, "o", "s"] -[0.8, "o", "k"] -[0.816, "o", " "] -[0.832, "o", "+"] -[0.848, "o", " "] -[0.864, "o", "P"] -[0.88, "o", "o"] -[0.896, "o", "s"] -[0.912, "o", "t"] -[0.928, "o", "g"] -[0.944, "o", "r"] -[0.96, "o", "e"] -[0.976, "o", "s"] -[0.992, "o", " "] -[1.008, "o", "a"] -[1.024, "o", "p"] -[1.04, "o", "p"] -[1.056, "o", " "] -[1.072, "o", "f"] -[1.088, "o", "r"] -[1.104, "o", "o"] -[1.12, "o", "m"] -[1.136, "o", " "] -[1.152, "o", "a"] -[1.168, "o", " "] -[1.184, "o", "p"] -[1.2, "o", "l"] -[1.216, "o", "a"] -[1.232, "o", "i"] -[1.248, "o", "n"] -[1.264, "o", "-"] -[1.28, "o", "E"] -[1.296, "o", "n"] -[1.312, "o", "g"] -[1.328, "o", "l"] -[1.344, "o", "i"] -[1.36, "o", "s"] -[1.376, "o", "h"] -[1.392, "o", " "] -[1.408, "o", "P"] -[1.424, "o", "R"] -[1.44, "o", "D"] -[1.456, "o", "\u001b"] -[1.472, "o", "["] -[1.488, "o", "0"] -[1.504, "o", "m"] -[1.52, "o", "\r\n"] -[1.87, "o", "\u001b[32m$\u001b[0m "] -[1.87, "o", "\u001b"] -[1.898, "o", "["] -[1.926, "o", "3"] -[1.954, "o", "6"] -[1.982, "o", "m"] -[2.01, "o", "p"] -[2.038, "o", "y"] -[2.066, "o", "t"] -[2.094, "o", "h"] -[2.122, "o", "o"] -[2.15, "o", "n"] -[2.178, "o", " "] -[2.206, "o", "m"] -[2.234, "o", "i"] -[2.262, "o", "c"] -[2.29, "o", "r"] -[2.318, "o", "o"] -[2.346, "o", "c"] -[2.374, "o", "o"] -[2.402, "o", "d"] -[2.43, "o", "e"] -[2.458, "o", "g"] -[2.486, "o", "e"] -[2.514, "o", "n"] -[2.542, "o", "."] -[2.57, "o", "p"] -[2.598, "o", "y"] -[2.626, "o", " "] -[2.654, "o", "e"] -[2.682, "o", "x"] -[2.71, "o", "a"] -[2.738, "o", "m"] -[2.766, "o", "p"] -[2.794, "o", "l"] -[2.822, "o", "e"] -[2.85, "o", "s"] -[2.878, "o", "/"] -[2.906, "o", "t"] -[2.934, "o", "a"] -[2.962, "o", "s"] -[2.99, "o", "k"] -[3.018, "o", "_"] -[3.046, "o", "m"] -[3.074, "o", "a"] -[3.102, "o", "n"] -[3.13, "o", "a"] -[3.158, "o", "g"] -[3.186, "o", "e"] -[3.214, "o", "r"] -[3.242, "o", "."] -[3.27, "o", "m"] -[3.298, "o", "d"] -[3.326, "o", " "] -[3.354, "o", "-"] -[3.382, "o", "-"] -[3.41, "o", "o"] -[3.438, "o", "u"] -[3.466, "o", "t"] -[3.494, "o", " "] -[3.522, "o", "."] -[3.55, "o", "/"] -[3.578, "o", "m"] -[3.606, "o", "y"] -[3.634, "o", "-"] -[3.662, "o", "t"] -[3.69, "o", "a"] -[3.718, "o", "s"] -[3.746, "o", "k"] -[3.774, "o", "-"] -[3.802, "o", "a"] -[3.83, "o", "p"] -[3.858, "o", "p"] -[3.886, "o", "\u001b"] -[3.914, "o", "["] -[3.942, "o", "0"] -[3.97, "o", "m"] -[3.998, "o", "\r\n"] -[4.348, "o", "Wrote 25 files to my-task-app\r\n"] -[5.238, "o", "\u001b[32m$\u001b[0m "] -[5.238, "o", "\u001b"] -[5.254, "o", "["] -[5.27, "o", "9"] -[5.286, "o", "0"] -[5.302, "o", "m"] -[5.318, "o", "#"] -[5.334, "o", " "] -[5.35, "o", "2"] -[5.366, "o", "."] -[5.382, "o", " "] -[5.398, "o", "B"] -[5.414, "o", "o"] -[5.43, "o", "o"] -[5.446, "o", "t"] -[5.462, "o", " "] -[5.478, "o", "i"] -[5.494, "o", "t"] -[5.51, "o", " "] -[5.526, "o", "—"] -[5.542, "o", " "] -[5.558, "o", "h"] -[5.574, "o", "e"] -[5.59, "o", "a"] -[5.606, "o", "l"] -[5.622, "o", "t"] -[5.638, "o", "h"] -[5.654, "o", "c"] -[5.67, "o", "h"] -[5.686, "o", "e"] -[5.702, "o", "c"] -[5.718, "o", "k"] -[5.734, "o", "-"] -[5.75, "o", "g"] -[5.766, "o", "a"] -[5.782, "o", "t"] -[5.798, "o", "e"] -[5.814, "o", "d"] -[5.83, "o", ","] -[5.846, "o", " "] -[5.862, "o", "z"] -[5.878, "o", "e"] -[5.894, "o", "r"] -[5.91, "o", "o"] -[5.926, "o", " "] -[5.942, "o", "e"] -[5.958, "o", "d"] -[5.974, "o", "i"] -[5.99, "o", "t"] -[6.006, "o", "s"] -[6.022, "o", ","] -[6.038, "o", " "] -[6.054, "o", "z"] -[6.07, "o", "e"] -[6.086, "o", "r"] -[6.102, "o", "o"] -[6.118, "o", " "] -[6.134, "o", "A"] -[6.15, "o", "P"] -[6.166, "o", "I"] -[6.182, "o", " "] -[6.198, "o", "k"] -[6.214, "o", "e"] -[6.23, "o", "y"] -[6.246, "o", "s"] -[6.262, "o", "\u001b"] -[6.278, "o", "["] -[6.294, "o", "0"] -[6.31, "o", "m"] -[6.326, "o", "\r\n"] -[6.676, "o", "\u001b[32m$\u001b[0m "] -[6.676, "o", "\u001b"] -[6.704, "o", "["] -[6.732, "o", "3"] -[6.76, "o", "6"] -[6.788, "o", "m"] -[6.816, "o", "c"] -[6.844, "o", "d"] -[6.872, "o", " "] -[6.9, "o", "m"] -[6.928, "o", "y"] -[6.956, "o", "-"] -[6.984, "o", "t"] -[7.012, "o", "a"] -[7.04, "o", "s"] -[7.068, "o", "k"] -[7.096, "o", "-"] -[7.124, "o", "a"] -[7.152, "o", "p"] -[7.18, "o", "p"] -[7.208, "o", " "] -[7.236, "o", "&"] -[7.264, "o", "&"] -[7.292, "o", " "] -[7.32, "o", "d"] -[7.348, "o", "o"] -[7.376, "o", "c"] -[7.404, "o", "k"] -[7.432, "o", "e"] -[7.46, "o", "r"] -[7.488, "o", " "] -[7.516, "o", "c"] -[7.544, "o", "o"] -[7.572, "o", "m"] -[7.6, "o", "p"] -[7.628, "o", "o"] -[7.656, "o", "s"] -[7.684, "o", "e"] -[7.712, "o", " "] -[7.74, "o", "u"] -[7.768, "o", "p"] -[7.796, "o", " "] -[7.824, "o", "-"] -[7.852, "o", "d"] -[7.88, "o", " "] -[7.908, "o", "-"] -[7.936, "o", "-"] -[7.964, "o", "b"] -[7.992, "o", "u"] -[8.02, "o", "i"] -[8.048, "o", "l"] -[8.076, "o", "d"] -[8.104, "o", "\u001b"] -[8.132, "o", "["] -[8.16, "o", "0"] -[8.188, "o", "m"] -[8.216, "o", "\r\n"] -[8.566, "o", "\u001b[32m ✔ Container my-task-app-db-1 Healthy\u001b[0m\r\n"] -[8.606, "o", "\u001b[32m ✔ Container my-task-app-app-1 Started\u001b[0m\r\n"] -[9.496, "o", "\u001b[32m$\u001b[0m "] -[9.496, "o", "\u001b"] -[9.512, "o", "["] -[9.528, "o", "9"] -[9.544, "o", "0"] -[9.56, "o", "m"] -[9.576, "o", "#"] -[9.592, "o", " "] -[9.608, "o", "3"] -[9.624, "o", "."] -[9.64, "o", " "] -[9.656, "o", "I"] -[9.672, "o", "t"] -[9.688, "o", "'"] -[9.704, "o", "s"] -[9.72, "o", " "] -[9.736, "o", "l"] -[9.752, "o", "i"] -[9.768, "o", "v"] -[9.784, "o", "e"] -[9.8, "o", "\u001b"] -[9.816, "o", "["] -[9.832, "o", "0"] -[9.848, "o", "m"] -[9.864, "o", "\r\n"] -[10.214, "o", "\u001b[32m$\u001b[0m "] -[10.214, "o", "\u001b"] -[10.242, "o", "["] -[10.27, "o", "3"] -[10.298, "o", "6"] -[10.326, "o", "m"] -[10.354, "o", "c"] -[10.382, "o", "u"] -[10.41, "o", "r"] -[10.438, "o", "l"] -[10.466, "o", " "] -[10.494, "o", "l"] -[10.522, "o", "o"] -[10.55, "o", "c"] -[10.578, "o", "a"] -[10.606, "o", "l"] -[10.634, "o", "h"] -[10.662, "o", "o"] -[10.69, "o", "s"] -[10.718, "o", "t"] -[10.746, "o", ":"] -[10.774, "o", "5"] -[10.802, "o", "0"] -[10.83, "o", "0"] -[10.858, "o", "0"] -[10.886, "o", "/"] -[10.914, "o", "a"] -[10.942, "o", "p"] -[10.97, "o", "i"] -[10.998, "o", "/"] -[11.026, "o", "h"] -[11.054, "o", "e"] -[11.082, "o", "a"] -[11.11, "o", "l"] -[11.138, "o", "t"] -[11.166, "o", "h"] -[11.194, "o", "\u001b"] -[11.222, "o", "["] -[11.25, "o", "0"] -[11.278, "o", "m"] -[11.306, "o", "\r\n"] -[11.656, "o", "{\"status\":\"ok\",\"version\":\"task_manager_saa_s\"}\r\n"] -[12.546, "o", "\u001b[32m$\u001b[0m "] -[12.546, "o", "\u001b"] -[12.562, "o", "["] -[12.578, "o", "9"] -[12.594, "o", "0"] -[12.61, "o", "m"] -[12.626, "o", "#"] -[12.642, "o", " "] -[12.658, "o", "R"] -[12.674, "o", "e"] -[12.69, "o", "g"] -[12.706, "o", "i"] -[12.722, "o", "s"] -[12.738, "o", "t"] -[12.754, "o", "e"] -[12.77, "o", "r"] -[12.786, "o", " "] -[12.802, "o", "—"] -[12.818, "o", " "] -[12.834, "o", "i"] -[12.85, "o", "s"] -[12.866, "o", "s"] -[12.882, "o", "u"] -[12.898, "o", "e"] -[12.914, "o", "s"] -[12.93, "o", " "] -[12.946, "o", "a"] -[12.962, "o", " "] -[12.978, "o", "J"] -[12.994, "o", "W"] -[13.01, "o", "T"] -[13.026, "o", " "] -[13.042, "o", "i"] -[13.058, "o", "n"] -[13.074, "o", " "] -[13.09, "o", "a"] -[13.106, "o", "n"] -[13.122, "o", " "] -[13.138, "o", "h"] -[13.154, "o", "t"] -[13.17, "o", "t"] -[13.186, "o", "p"] -[13.202, "o", "O"] -[13.218, "o", "n"] -[13.234, "o", "l"] -[13.25, "o", "y"] -[13.266, "o", " "] -[13.282, "o", "c"] -[13.298, "o", "o"] -[13.314, "o", "o"] -[13.33, "o", "k"] -[13.346, "o", "i"] -[13.362, "o", "e"] -[13.378, "o", " "] -[13.394, "o", "("] -[13.41, "o", "n"] -[13.426, "o", "e"] -[13.442, "o", "v"] -[13.458, "o", "e"] -[13.474, "o", "r"] -[13.49, "o", " "] -[13.506, "o", "l"] -[13.522, "o", "o"] -[13.538, "o", "c"] -[13.554, "o", "a"] -[13.57, "o", "l"] -[13.586, "o", "S"] -[13.602, "o", "t"] -[13.618, "o", "o"] -[13.634, "o", "r"] -[13.65, "o", "a"] -[13.666, "o", "g"] -[13.682, "o", "e"] -[13.698, "o", ")"] -[13.714, "o", "\u001b"] -[13.73, "o", "["] -[13.746, "o", "0"] -[13.762, "o", "m"] -[13.778, "o", "\r\n"] -[14.128, "o", "\u001b[32m$\u001b[0m "] -[14.128, "o", "\u001b"] -[14.156, "o", "["] -[14.184, "o", "3"] -[14.212, "o", "6"] -[14.24, "o", "m"] -[14.268, "o", "c"] -[14.296, "o", "u"] -[14.324, "o", "r"] -[14.352, "o", "l"] -[14.38, "o", " "] -[14.408, "o", "-"] -[14.436, "o", "c"] -[14.464, "o", " "] -[14.492, "o", "c"] -[14.52, "o", "o"] -[14.548, "o", "o"] -[14.576, "o", "k"] -[14.604, "o", "i"] -[14.632, "o", "e"] -[14.66, "o", "s"] -[14.688, "o", "."] -[14.716, "o", "t"] -[14.744, "o", "x"] -[14.772, "o", "t"] -[14.8, "o", " "] -[14.828, "o", "-"] -[14.856, "o", "X"] -[14.884, "o", " "] -[14.912, "o", "P"] -[14.94, "o", "O"] -[14.968, "o", "S"] -[14.996, "o", "T"] -[15.024, "o", " "] -[15.052, "o", "l"] -[15.08, "o", "o"] -[15.108, "o", "c"] -[15.136, "o", "a"] -[15.164, "o", "l"] -[15.192, "o", "h"] -[15.22, "o", "o"] -[15.248, "o", "s"] -[15.276, "o", "t"] -[15.304, "o", ":"] -[15.332, "o", "5"] -[15.36, "o", "0"] -[15.388, "o", "0"] -[15.416, "o", "0"] -[15.444, "o", "/"] -[15.472, "o", "a"] -[15.5, "o", "p"] -[15.528, "o", "i"] -[15.556, "o", "/"] -[15.584, "o", "a"] -[15.612, "o", "u"] -[15.64, "o", "t"] -[15.668, "o", "h"] -[15.696, "o", "/"] -[15.724, "o", "r"] -[15.752, "o", "e"] -[15.78, "o", "g"] -[15.808, "o", "i"] -[15.836, "o", "s"] -[15.864, "o", "t"] -[15.892, "o", "e"] -[15.92, "o", "r"] -[15.948, "o", " "] -[15.976, "o", "\\"] -[16.004, "o", "\u001b"] -[16.032, "o", "["] -[16.06, "o", "0"] -[16.088, "o", "m"] -[16.116, "o", "\r\n"] -[16.466, "o", "\u001b"] -[16.494, "o", "["] -[16.522, "o", "3"] -[16.55, "o", "6"] -[16.578, "o", "m"] -[16.606, "o", " "] -[16.634, "o", " "] -[16.662, "o", " "] -[16.69, "o", " "] -[16.718, "o", " "] -[16.746, "o", "-"] -[16.774, "o", "d"] -[16.802, "o", " "] -[16.83, "o", "'"] -[16.858, "o", "{"] -[16.886, "o", "\""] -[16.914, "o", "e"] -[16.942, "o", "m"] -[16.97, "o", "a"] -[16.998, "o", "i"] -[17.026, "o", "l"] -[17.054, "o", "\""] -[17.082, "o", ":"] -[17.11, "o", "\""] -[17.138, "o", "y"] -[17.166, "o", "o"] -[17.194, "o", "u"] -[17.222, "o", "@"] -[17.25, "o", "e"] -[17.278, "o", "x"] -[17.306, "o", "a"] -[17.334, "o", "m"] -[17.362, "o", "p"] -[17.39, "o", "l"] -[17.418, "o", "e"] -[17.446, "o", "."] -[17.474, "o", "c"] -[17.502, "o", "o"] -[17.53, "o", "m"] -[17.558, "o", "\""] -[17.586, "o", ","] -[17.614, "o", "\""] -[17.642, "o", "p"] -[17.67, "o", "a"] -[17.698, "o", "s"] -[17.726, "o", "s"] -[17.754, "o", "w"] -[17.782, "o", "o"] -[17.81, "o", "r"] -[17.838, "o", "d"] -[17.866, "o", "\""] -[17.894, "o", ":"] -[17.922, "o", "\""] -[17.95, "o", "h"] -[17.978, "o", "u"] -[18.006, "o", "n"] -[18.034, "o", "t"] -[18.062, "o", "e"] -[18.09, "o", "r"] -[18.118, "o", "2"] -[18.146, "o", "2"] -[18.174, "o", "h"] -[18.202, "o", "u"] -[18.23, "o", "n"] -[18.258, "o", "t"] -[18.286, "o", "e"] -[18.314, "o", "r"] -[18.342, "o", "\""] -[18.37, "o", "}"] -[18.398, "o", "'"] -[18.426, "o", "\u001b"] -[18.454, "o", "["] -[18.482, "o", "0"] -[18.51, "o", "m"] -[18.538, "o", "\r\n"] -[18.888, "o", "{\"user\":{\"email\":\"you@example.com\",\"id\":\"c3f365ce-dd75-47c1-a26b-9b0fe928369c\"}}\r\n"] -[19.778, "o", "\u001b[32m$\u001b[0m "] -[19.778, "o", "\u001b"] -[19.794, "o", "["] -[19.81, "o", "9"] -[19.826, "o", "0"] -[19.842, "o", "m"] -[19.858, "o", "#"] -[19.874, "o", " "] -[19.89, "o", "C"] -[19.906, "o", "r"] -[19.922, "o", "e"] -[19.938, "o", "a"] -[19.954, "o", "t"] -[19.97, "o", "e"] -[19.986, "o", " "] -[20.002, "o", "a"] -[20.018, "o", " "] -[20.034, "o", "p"] -[20.05, "o", "r"] -[20.066, "o", "o"] -[20.082, "o", "j"] -[20.098, "o", "e"] -[20.114, "o", "c"] -[20.13, "o", "t"] -[20.146, "o", " "] -[20.162, "o", "—"] -[20.178, "o", " "] -[20.194, "o", "a"] -[20.21, "o", "u"] -[20.226, "o", "t"] -[20.242, "o", "h"] -[20.258, "o", " "] -[20.274, "o", "r"] -[20.29, "o", "e"] -[20.306, "o", "q"] +{"version": 2, "width": 100, "height": 37, "timestamp": 1700000000, "env": {"TERM": "xterm-256color", "SHELL": "/bin/bash"}, "title": "microcodegen.py \u2014 PRD \u2192 running app"} +[0.4, "o", "[32m$[0m "] +[0.4, "o", "["] +[0.415, "o", "9"] +[0.43, "o", "0"] +[0.445, "o", "m"] +[0.46, "o", "#"] +[0.475, "o", " "] +[0.49, "o", "1"] +[0.505, "o", "."] +[0.52, "o", " "] +[0.535, "o", "G"] +[0.55, "o", "e"] +[0.565, "o", "n"] +[0.58, "o", "e"] +[0.595, "o", "r"] +[0.61, "o", "a"] +[0.625, "o", "t"] +[0.64, "o", "e"] +[0.655, "o", " "] +[0.67, "o", "a"] +[0.685, "o", " "] +[0.7, "o", "F"] +[0.715, "o", "l"] +[0.73, "o", "a"] +[0.745, "o", "s"] +[0.76, "o", "k"] +[0.775, "o", " "] +[0.79, "o", "+"] +[0.805, "o", " "] +[0.82, "o", "P"] +[0.835, "o", "o"] +[0.85, "o", "s"] +[0.865, "o", "t"] +[0.88, "o", "g"] +[0.895, "o", "r"] +[0.91, "o", "e"] +[0.925, "o", "s"] +[0.94, "o", " "] +[0.955, "o", "a"] +[0.97, "o", "p"] +[0.985, "o", "p"] +[1.0, "o", " "] +[1.015, "o", "f"] +[1.03, "o", "r"] +[1.045, "o", "o"] +[1.06, "o", "m"] +[1.075, "o", " "] +[1.09, "o", "a"] +[1.105, "o", " "] +[1.12, "o", "p"] +[1.135, "o", "l"] +[1.15, "o", "a"] +[1.165, "o", "i"] +[1.18, "o", "n"] +[1.195, "o", "-"] +[1.21, "o", "E"] +[1.225, "o", "n"] +[1.24, "o", "g"] +[1.255, "o", "l"] +[1.27, "o", "i"] +[1.285, "o", "s"] +[1.3, "o", "h"] +[1.315, "o", " "] +[1.33, "o", "P"] +[1.345, "o", "R"] +[1.36, "o", "D"] +[1.375, "o", "["] +[1.39, "o", "0"] +[1.405, "o", "m"] +[1.42, "o", "\r\n"] +[1.74, "o", "[32m$[0m "] +[1.74, "o", "["] +[1.766, "o", "3"] +[1.792, "o", "6"] +[1.818, "o", "m"] +[1.844, "o", "p"] +[1.87, "o", "y"] +[1.896, "o", "t"] +[1.922, "o", "h"] +[1.948, "o", "o"] +[1.974, "o", "n"] +[2.0, "o", " "] +[2.026, "o", "m"] +[2.052, "o", "i"] +[2.078, "o", "c"] +[2.104, "o", "r"] +[2.13, "o", "o"] +[2.156, "o", "c"] +[2.182, "o", "o"] +[2.208, "o", "d"] +[2.234, "o", "e"] +[2.26, "o", "g"] +[2.286, "o", "e"] +[2.312, "o", "n"] +[2.338, "o", "."] +[2.364, "o", "p"] +[2.39, "o", "y"] +[2.416, "o", " "] +[2.442, "o", "e"] +[2.468, "o", "x"] +[2.494, "o", "a"] +[2.52, "o", "m"] +[2.546, "o", "p"] +[2.572, "o", "l"] +[2.598, "o", "e"] +[2.624, "o", "s"] +[2.65, "o", "/"] +[2.676, "o", "t"] +[2.702, "o", "a"] +[2.728, "o", "s"] +[2.754, "o", "k"] +[2.78, "o", "_"] +[2.806, "o", "m"] +[2.832, "o", "a"] +[2.858, "o", "n"] +[2.884, "o", "a"] +[2.91, "o", "g"] +[2.936, "o", "e"] +[2.962, "o", "r"] +[2.988, "o", "."] +[3.014, "o", "m"] +[3.04, "o", "d"] +[3.066, "o", " "] +[3.092, "o", "-"] +[3.118, "o", "-"] +[3.144, "o", "o"] +[3.17, "o", "u"] +[3.196, "o", "t"] +[3.222, "o", " "] +[3.248, "o", "."] +[3.274, "o", "/"] +[3.3, "o", "m"] +[3.326, "o", "y"] +[3.352, "o", "-"] +[3.378, "o", "t"] +[3.404, "o", "a"] +[3.43, "o", "s"] +[3.456, "o", "k"] +[3.482, "o", "-"] +[3.508, "o", "a"] +[3.534, "o", "p"] +[3.56, "o", "p"] +[3.586, "o", "["] +[3.612, "o", "0"] +[3.638, "o", "m"] +[3.664, "o", "\r\n"] +[3.984, "o", "Wrote 25 files to my-task-app\r\n"] +[4.819, "o", "[32m$[0m "] +[4.819, "o", "["] +[4.834, "o", "9"] +[4.849, "o", "0"] +[4.864, "o", "m"] +[4.879, "o", "#"] +[4.894, "o", " "] +[4.909, "o", "A"] +[4.924, "o", " "] +[4.939, "o", "r"] +[4.954, "o", "e"] +[4.969, "o", "a"] +[4.984, "o", "l"] +[4.999, "o", " "] +[5.014, "o", "a"] +[5.029, "o", "p"] +[5.044, "o", "p"] +[5.059, "o", ","] +[5.074, "o", " "] +[5.089, "o", "n"] +[5.104, "o", "o"] +[5.119, "o", "t"] +[5.134, "o", " "] +[5.149, "o", "a"] +[5.164, "o", "n"] +[5.179, "o", " "] +[5.194, "o", "e"] +[5.209, "o", "m"] +[5.224, "o", "p"] +[5.239, "o", "t"] +[5.254, "o", "y"] +[5.269, "o", " "] +[5.284, "o", "s"] +[5.299, "o", "k"] +[5.314, "o", "e"] +[5.329, "o", "l"] +[5.344, "o", "e"] +[5.359, "o", "t"] +[5.374, "o", "o"] +[5.389, "o", "n"] +[5.404, "o", " "] +[5.419, "o", "—"] +[5.434, "o", " "] +[5.449, "o", "e"] +[5.464, "o", "n"] +[5.479, "o", "t"] +[5.494, "o", "i"] +[5.509, "o", "t"] +[5.524, "o", "y"] +[5.539, "o", "-"] +[5.554, "o", "s"] +[5.569, "o", "p"] +[5.584, "o", "e"] +[5.599, "o", "c"] +[5.614, "o", "i"] +[5.629, "o", "f"] +[5.644, "o", "i"] +[5.659, "o", "c"] +[5.674, "o", " "] +[5.689, "o", "c"] +[5.704, "o", "o"] +[5.719, "o", "d"] +[5.734, "o", "e"] +[5.749, "o", " "] +[5.764, "o", "p"] +[5.779, "o", "e"] +[5.794, "o", "r"] +[5.809, "o", " "] +[5.824, "o", "m"] +[5.839, "o", "o"] +[5.854, "o", "d"] +[5.869, "o", "e"] +[5.884, "o", "l"] +[5.899, "o", ":"] +[5.914, "o", "["] +[5.929, "o", "0"] +[5.944, "o", "m"] +[5.959, "o", "\r\n"] +[6.279, "o", "[32m$[0m "] +[6.279, "o", "["] +[6.305, "o", "3"] +[6.331, "o", "6"] +[6.357, "o", "m"] +[6.383, "o", "t"] +[6.409, "o", "r"] +[6.435, "o", "e"] +[6.461, "o", "e"] +[6.487, "o", " "] +[6.513, "o", "m"] +[6.539, "o", "y"] +[6.565, "o", "-"] +[6.591, "o", "t"] +[6.617, "o", "a"] +[6.643, "o", "s"] +[6.669, "o", "k"] +[6.695, "o", "-"] +[6.721, "o", "a"] +[6.747, "o", "p"] +[6.773, "o", "p"] +[6.799, "o", "["] +[6.825, "o", "0"] +[6.851, "o", "m"] +[6.877, "o", "\r\n"] +[7.197, "o", "[34mmy-task-app/[0m\r\n"] +[7.232, "o", "├─ wsgi.py config.py requirements.txt Dockerfile docker-compose.yml .env.example\r\n"] +[7.267, "o", "├─ README.md GENOME.json [90m# GENOME.json = the architectural IR it rendered from[0m\r\n"] +[7.302, "o", "├─ [34mapp/[0m\r\n"] +[7.337, "o", "│ ├─ __init__.py [90m# Flask app factory: blueprints, JWT, CORS, error handlers[0m\r\n"] +[7.372, "o", "│ ├─ database.py\r\n"] +[7.407, "o", "│ ├─ [34mblueprints/[0m auth_bp project_bp task_bp comment_bp label_bp [90m# CRUD, @jwt_required[0m\r\n"] +[7.442, "o", "│ ├─ [34mmodels/[0m user project task comment label [90m# user_id FK, per-tenant[0m\r\n"] +[7.477, "o", "│ └─ [34mstatic/[0mindex.html [90m# click-through register/login/CRUD page[0m\r\n"] +[7.512, "o", "└─ [34mtests/[0m conftest.py test_health.py\r\n"] +[8.547, "o", "[32m$[0m "] +[8.547, "o", "["] +[8.562, "o", "9"] +[8.577, "o", "0"] +[8.592, "o", "m"] +[8.607, "o", "#"] +[8.622, "o", " "] +[8.637, "o", "2"] +[8.652, "o", "."] +[8.667, "o", " "] +[8.682, "o", "B"] +[8.697, "o", "o"] +[8.712, "o", "o"] +[8.727, "o", "t"] +[8.742, "o", " "] +[8.757, "o", "i"] +[8.772, "o", "t"] +[8.787, "o", " "] +[8.802, "o", "—"] +[8.817, "o", " "] +[8.832, "o", "h"] +[8.847, "o", "e"] +[8.862, "o", "a"] +[8.877, "o", "l"] +[8.892, "o", "t"] +[8.907, "o", "h"] +[8.922, "o", "c"] +[8.937, "o", "h"] +[8.952, "o", "e"] +[8.967, "o", "c"] +[8.982, "o", "k"] +[8.997, "o", "-"] +[9.012, "o", "g"] +[9.027, "o", "a"] +[9.042, "o", "t"] +[9.057, "o", "e"] +[9.072, "o", "d"] +[9.087, "o", ","] +[9.102, "o", " "] +[9.117, "o", "z"] +[9.132, "o", "e"] +[9.147, "o", "r"] +[9.162, "o", "o"] +[9.177, "o", " "] +[9.192, "o", "e"] +[9.207, "o", "d"] +[9.222, "o", "i"] +[9.237, "o", "t"] +[9.252, "o", "s"] +[9.267, "o", ","] +[9.282, "o", " "] +[9.297, "o", "z"] +[9.312, "o", "e"] +[9.327, "o", "r"] +[9.342, "o", "o"] +[9.357, "o", " "] +[9.372, "o", "A"] +[9.387, "o", "P"] +[9.402, "o", "I"] +[9.417, "o", " "] +[9.432, "o", "k"] +[9.447, "o", "e"] +[9.462, "o", "y"] +[9.477, "o", "s"] +[9.492, "o", "["] +[9.507, "o", "0"] +[9.522, "o", "m"] +[9.537, "o", "\r\n"] +[9.857, "o", "[32m$[0m "] +[9.857, "o", "["] +[9.883, "o", "3"] +[9.909, "o", "6"] +[9.935, "o", "m"] +[9.961, "o", "c"] +[9.987, "o", "d"] +[10.013, "o", " "] +[10.039, "o", "m"] +[10.065, "o", "y"] +[10.091, "o", "-"] +[10.117, "o", "t"] +[10.143, "o", "a"] +[10.169, "o", "s"] +[10.195, "o", "k"] +[10.221, "o", "-"] +[10.247, "o", "a"] +[10.273, "o", "p"] +[10.299, "o", "p"] +[10.325, "o", " "] +[10.351, "o", "&"] +[10.377, "o", "&"] +[10.403, "o", " "] +[10.429, "o", "d"] +[10.455, "o", "o"] +[10.481, "o", "c"] +[10.507, "o", "k"] +[10.533, "o", "e"] +[10.559, "o", "r"] +[10.585, "o", " "] +[10.611, "o", "c"] +[10.637, "o", "o"] +[10.663, "o", "m"] +[10.689, "o", "p"] +[10.715, "o", "o"] +[10.741, "o", "s"] +[10.767, "o", "e"] +[10.793, "o", " "] +[10.819, "o", "u"] +[10.845, "o", "p"] +[10.871, "o", " "] +[10.897, "o", "-"] +[10.923, "o", "d"] +[10.949, "o", " "] +[10.975, "o", "-"] +[11.001, "o", "-"] +[11.027, "o", "b"] +[11.053, "o", "u"] +[11.079, "o", "i"] +[11.105, "o", "l"] +[11.131, "o", "d"] +[11.157, "o", "["] +[11.183, "o", "0"] +[11.209, "o", "m"] +[11.235, "o", "\r\n"] +[11.555, "o", "[32m ✔ Container my-task-app-db-1 Healthy[0m\r\n"] +[11.59, "o", "[32m ✔ Container my-task-app-app-1 Started[0m\r\n"] +[12.425, "o", "[32m$[0m "] +[12.425, "o", "["] +[12.44, "o", "9"] +[12.455, "o", "0"] +[12.47, "o", "m"] +[12.485, "o", "#"] +[12.5, "o", " "] +[12.515, "o", "3"] +[12.53, "o", "."] +[12.545, "o", " "] +[12.56, "o", "I"] +[12.575, "o", "t"] +[12.59, "o", "'"] +[12.605, "o", "s"] +[12.62, "o", " "] +[12.635, "o", "l"] +[12.65, "o", "i"] +[12.665, "o", "v"] +[12.68, "o", "e"] +[12.695, "o", "["] +[12.71, "o", "0"] +[12.725, "o", "m"] +[12.74, "o", "\r\n"] +[13.06, "o", "[32m$[0m "] +[13.06, "o", "["] +[13.086, "o", "3"] +[13.112, "o", "6"] +[13.138, "o", "m"] +[13.164, "o", "c"] +[13.19, "o", "u"] +[13.216, "o", "r"] +[13.242, "o", "l"] +[13.268, "o", " "] +[13.294, "o", "l"] +[13.32, "o", "o"] +[13.346, "o", "c"] +[13.372, "o", "a"] +[13.398, "o", "l"] +[13.424, "o", "h"] +[13.45, "o", "o"] +[13.476, "o", "s"] +[13.502, "o", "t"] +[13.528, "o", ":"] +[13.554, "o", "5"] +[13.58, "o", "0"] +[13.606, "o", "0"] +[13.632, "o", "0"] +[13.658, "o", "/"] +[13.684, "o", "a"] +[13.71, "o", "p"] +[13.736, "o", "i"] +[13.762, "o", "/"] +[13.788, "o", "h"] +[13.814, "o", "e"] +[13.84, "o", "a"] +[13.866, "o", "l"] +[13.892, "o", "t"] +[13.918, "o", "h"] +[13.944, "o", "["] +[13.97, "o", "0"] +[13.996, "o", "m"] +[14.022, "o", "\r\n"] +[14.342, "o", "{\"status\":\"ok\",\"version\":\"task_manager_saa_s\"}\r\n"] +[15.177, "o", "[32m$[0m "] +[15.177, "o", "["] +[15.192, "o", "9"] +[15.207, "o", "0"] +[15.222, "o", "m"] +[15.237, "o", "#"] +[15.252, "o", " "] +[15.267, "o", "R"] +[15.282, "o", "e"] +[15.297, "o", "g"] +[15.312, "o", "i"] +[15.327, "o", "s"] +[15.342, "o", "t"] +[15.357, "o", "e"] +[15.372, "o", "r"] +[15.387, "o", " "] +[15.402, "o", "—"] +[15.417, "o", " "] +[15.432, "o", "i"] +[15.447, "o", "s"] +[15.462, "o", "s"] +[15.477, "o", "u"] +[15.492, "o", "e"] +[15.507, "o", "s"] +[15.522, "o", " "] +[15.537, "o", "a"] +[15.552, "o", " "] +[15.567, "o", "J"] +[15.582, "o", "W"] +[15.597, "o", "T"] +[15.612, "o", " "] +[15.627, "o", "i"] +[15.642, "o", "n"] +[15.657, "o", " "] +[15.672, "o", "a"] +[15.687, "o", "n"] +[15.702, "o", " "] +[15.717, "o", "h"] +[15.732, "o", "t"] +[15.747, "o", "t"] +[15.762, "o", "p"] +[15.777, "o", "O"] +[15.792, "o", "n"] +[15.807, "o", "l"] +[15.822, "o", "y"] +[15.837, "o", " "] +[15.852, "o", "c"] +[15.867, "o", "o"] +[15.882, "o", "o"] +[15.897, "o", "k"] +[15.912, "o", "i"] +[15.927, "o", "e"] +[15.942, "o", " "] +[15.957, "o", "("] +[15.972, "o", "n"] +[15.987, "o", "e"] +[16.002, "o", "v"] +[16.017, "o", "e"] +[16.032, "o", "r"] +[16.047, "o", " "] +[16.062, "o", "l"] +[16.077, "o", "o"] +[16.092, "o", "c"] +[16.107, "o", "a"] +[16.122, "o", "l"] +[16.137, "o", "S"] +[16.152, "o", "t"] +[16.167, "o", "o"] +[16.182, "o", "r"] +[16.197, "o", "a"] +[16.212, "o", "g"] +[16.227, "o", "e"] +[16.242, "o", ")"] +[16.257, "o", "["] +[16.272, "o", "0"] +[16.287, "o", "m"] +[16.302, "o", "\r\n"] +[16.622, "o", "[32m$[0m "] +[16.622, "o", "["] +[16.648, "o", "3"] +[16.674, "o", "6"] +[16.7, "o", "m"] +[16.726, "o", "c"] +[16.752, "o", "u"] +[16.778, "o", "r"] +[16.804, "o", "l"] +[16.83, "o", " "] +[16.856, "o", "-"] +[16.882, "o", "c"] +[16.908, "o", " "] +[16.934, "o", "c"] +[16.96, "o", "o"] +[16.986, "o", "o"] +[17.012, "o", "k"] +[17.038, "o", "i"] +[17.064, "o", "e"] +[17.09, "o", "s"] +[17.116, "o", "."] +[17.142, "o", "t"] +[17.168, "o", "x"] +[17.194, "o", "t"] +[17.22, "o", " "] +[17.246, "o", "-"] +[17.272, "o", "X"] +[17.298, "o", " "] +[17.324, "o", "P"] +[17.35, "o", "O"] +[17.376, "o", "S"] +[17.402, "o", "T"] +[17.428, "o", " "] +[17.454, "o", "l"] +[17.48, "o", "o"] +[17.506, "o", "c"] +[17.532, "o", "a"] +[17.558, "o", "l"] +[17.584, "o", "h"] +[17.61, "o", "o"] +[17.636, "o", "s"] +[17.662, "o", "t"] +[17.688, "o", ":"] +[17.714, "o", "5"] +[17.74, "o", "0"] +[17.766, "o", "0"] +[17.792, "o", "0"] +[17.818, "o", "/"] +[17.844, "o", "a"] +[17.87, "o", "p"] +[17.896, "o", "i"] +[17.922, "o", "/"] +[17.948, "o", "a"] +[17.974, "o", "u"] +[18.0, "o", "t"] +[18.026, "o", "h"] +[18.052, "o", "/"] +[18.078, "o", "r"] +[18.104, "o", "e"] +[18.13, "o", "g"] +[18.156, "o", "i"] +[18.182, "o", "s"] +[18.208, "o", "t"] +[18.234, "o", "e"] +[18.26, "o", "r"] +[18.286, "o", " "] +[18.312, "o", "\\"] +[18.338, "o", "["] +[18.364, "o", "0"] +[18.39, "o", "m"] +[18.416, "o", "\r\n"] +[18.736, "o", "["] +[18.762, "o", "3"] +[18.788, "o", "6"] +[18.814, "o", "m"] +[18.84, "o", " "] +[18.866, "o", " "] +[18.892, "o", " "] +[18.918, "o", " "] +[18.944, "o", " "] +[18.97, "o", "-"] +[18.996, "o", "d"] +[19.022, "o", " "] +[19.048, "o", "'"] +[19.074, "o", "{"] +[19.1, "o", "\""] +[19.126, "o", "e"] +[19.152, "o", "m"] +[19.178, "o", "a"] +[19.204, "o", "i"] +[19.23, "o", "l"] +[19.256, "o", "\""] +[19.282, "o", ":"] +[19.308, "o", "\""] +[19.334, "o", "y"] +[19.36, "o", "o"] +[19.386, "o", "u"] +[19.412, "o", "@"] +[19.438, "o", "e"] +[19.464, "o", "x"] +[19.49, "o", "a"] +[19.516, "o", "m"] +[19.542, "o", "p"] +[19.568, "o", "l"] +[19.594, "o", "e"] +[19.62, "o", "."] +[19.646, "o", "c"] +[19.672, "o", "o"] +[19.698, "o", "m"] +[19.724, "o", "\""] +[19.75, "o", ","] +[19.776, "o", "\""] +[19.802, "o", "p"] +[19.828, "o", "a"] +[19.854, "o", "s"] +[19.88, "o", "s"] +[19.906, "o", "w"] +[19.932, "o", "o"] +[19.958, "o", "r"] +[19.984, "o", "d"] +[20.01, "o", "\""] +[20.036, "o", ":"] +[20.062, "o", "\""] +[20.088, "o", "h"] +[20.114, "o", "u"] +[20.14, "o", "n"] +[20.166, "o", "t"] +[20.192, "o", "e"] +[20.218, "o", "r"] +[20.244, "o", "2"] +[20.27, "o", "2"] +[20.296, "o", "h"] [20.322, "o", "u"] -[20.338, "o", "i"] -[20.354, "o", "r"] -[20.37, "o", "e"] -[20.386, "o", "d"] -[20.402, "o", ","] -[20.418, "o", " "] -[20.434, "o", "r"] -[20.45, "o", "o"] -[20.466, "o", "w"] -[20.482, "o", " "] -[20.498, "o", "s"] -[20.514, "o", "c"] -[20.53, "o", "o"] -[20.546, "o", "p"] -[20.562, "o", "e"] -[20.578, "o", "d"] -[20.594, "o", " "] -[20.61, "o", "t"] -[20.626, "o", "o"] -[20.642, "o", " "] -[20.658, "o", "t"] -[20.674, "o", "h"] -[20.69, "o", "i"] -[20.706, "o", "s"] -[20.722, "o", " "] -[20.738, "o", "u"] -[20.754, "o", "s"] -[20.77, "o", "e"] -[20.786, "o", "r"] -[20.802, "o", "\u001b"] -[20.818, "o", "["] -[20.834, "o", "0"] -[20.85, "o", "m"] -[20.866, "o", "\r\n"] -[21.216, "o", "\u001b[32m$\u001b[0m "] -[21.216, "o", "\u001b"] -[21.244, "o", "["] -[21.272, "o", "3"] -[21.3, "o", "6"] -[21.328, "o", "m"] -[21.356, "o", "c"] -[21.384, "o", "u"] -[21.412, "o", "r"] -[21.44, "o", "l"] -[21.468, "o", " "] -[21.496, "o", "-"] -[21.524, "o", "b"] -[21.552, "o", " "] -[21.58, "o", "c"] -[21.608, "o", "o"] -[21.636, "o", "o"] -[21.664, "o", "k"] -[21.692, "o", "i"] -[21.72, "o", "e"] -[21.748, "o", "s"] -[21.776, "o", "."] -[21.804, "o", "t"] -[21.832, "o", "x"] -[21.86, "o", "t"] -[21.888, "o", " "] -[21.916, "o", "-"] -[21.944, "o", "X"] -[21.972, "o", " "] -[22.0, "o", "P"] -[22.028, "o", "O"] -[22.056, "o", "S"] -[22.084, "o", "T"] -[22.112, "o", " "] -[22.14, "o", "l"] -[22.168, "o", "o"] -[22.196, "o", "c"] -[22.224, "o", "a"] -[22.252, "o", "l"] -[22.28, "o", "h"] -[22.308, "o", "o"] -[22.336, "o", "s"] -[22.364, "o", "t"] -[22.392, "o", ":"] -[22.42, "o", "5"] -[22.448, "o", "0"] -[22.476, "o", "0"] -[22.504, "o", "0"] -[22.532, "o", "/"] -[22.56, "o", "a"] -[22.588, "o", "p"] -[22.616, "o", "i"] -[22.644, "o", "/"] -[22.672, "o", "p"] -[22.7, "o", "r"] -[22.728, "o", "o"] -[22.756, "o", "j"] -[22.784, "o", "e"] -[22.812, "o", "c"] -[22.84, "o", "t"] -[22.868, "o", "s"] -[22.896, "o", "/"] -[22.924, "o", " "] -[22.952, "o", "-"] -[22.98, "o", "d"] -[23.008, "o", " "] -[23.036, "o", "'"] -[23.064, "o", "{"] -[23.092, "o", "\""] -[23.12, "o", "n"] -[23.148, "o", "a"] -[23.176, "o", "m"] -[23.204, "o", "e"] -[23.232, "o", "\""] -[23.26, "o", ":"] -[23.288, "o", "\""] -[23.316, "o", "M"] -[23.344, "o", "y"] -[23.372, "o", " "] -[23.4, "o", "f"] -[23.428, "o", "i"] -[23.456, "o", "r"] -[23.484, "o", "s"] -[23.512, "o", "t"] -[23.54, "o", " "] -[23.568, "o", "p"] -[23.596, "o", "r"] -[23.624, "o", "o"] -[23.652, "o", "j"] -[23.68, "o", "e"] -[23.708, "o", "c"] -[23.736, "o", "t"] -[23.764, "o", "\""] -[23.792, "o", "}"] -[23.82, "o", "'"] -[23.848, "o", "\u001b"] -[23.876, "o", "["] -[23.904, "o", "0"] -[23.932, "o", "m"] -[23.96, "o", "\r\n"] -[24.31, "o", "{\"id\":\"d2d14b5c-8026-421a-b027-cdc0b6c5ae63\",\"name\":\"My first project\",\r\n"] -[24.35, "o", " \"user_id\":\"c3f365ce-dd75-47c1-a26b-9b0fe928369c\",\"status\":null,\"description\":null,\"color\":null}\r\n"] -[25.24, "o", "\u001b[32m$\u001b[0m "] -[25.24, "o", "\u001b"] -[25.256, "o", "["] -[25.272, "o", "9"] -[25.288, "o", "0"] -[25.304, "o", "m"] -[25.32, "o", "#"] -[25.336, "o", " "] -[25.352, "o", "L"] -[25.368, "o", "i"] -[25.384, "o", "s"] -[25.4, "o", "t"] -[25.416, "o", " "] -[25.432, "o", "—"] -[25.448, "o", " "] -[25.464, "o", "r"] -[25.48, "o", "e"] -[25.496, "o", "t"] -[25.512, "o", "u"] -[25.528, "o", "r"] -[25.544, "o", "n"] -[25.56, "o", "s"] -[25.576, "o", " "] -[25.592, "o", "o"] -[25.608, "o", "n"] -[25.624, "o", "l"] -[25.64, "o", "y"] -[25.656, "o", " "] -[25.672, "o", "y"] -[25.688, "o", "o"] -[25.704, "o", "u"] -[25.72, "o", "r"] -[25.736, "o", " "] -[25.752, "o", "r"] -[25.768, "o", "o"] -[25.784, "o", "w"] -[25.8, "o", "s"] -[25.816, "o", "\u001b"] -[25.832, "o", "["] -[25.848, "o", "0"] -[25.864, "o", "m"] -[25.88, "o", "\r\n"] -[26.23, "o", "\u001b[32m$\u001b[0m "] -[26.23, "o", "\u001b"] -[26.258, "o", "["] -[26.286, "o", "3"] -[26.314, "o", "6"] -[26.342, "o", "m"] -[26.37, "o", "c"] -[26.398, "o", "u"] -[26.426, "o", "r"] -[26.454, "o", "l"] -[26.482, "o", " "] -[26.51, "o", "-"] -[26.538, "o", "b"] -[26.566, "o", " "] -[26.594, "o", "c"] -[26.622, "o", "o"] -[26.65, "o", "o"] -[26.678, "o", "k"] -[26.706, "o", "i"] -[26.734, "o", "e"] -[26.762, "o", "s"] -[26.79, "o", "."] -[26.818, "o", "t"] -[26.846, "o", "x"] -[26.874, "o", "t"] -[26.902, "o", " "] -[26.93, "o", "l"] -[26.958, "o", "o"] -[26.986, "o", "c"] -[27.014, "o", "a"] -[27.042, "o", "l"] -[27.07, "o", "h"] -[27.098, "o", "o"] -[27.126, "o", "s"] -[27.154, "o", "t"] -[27.182, "o", ":"] -[27.21, "o", "5"] -[27.238, "o", "0"] -[27.266, "o", "0"] -[27.294, "o", "0"] -[27.322, "o", "/"] -[27.35, "o", "a"] -[27.378, "o", "p"] -[27.406, "o", "i"] -[27.434, "o", "/"] -[27.462, "o", "p"] -[27.49, "o", "r"] -[27.518, "o", "o"] -[27.546, "o", "j"] -[27.574, "o", "e"] -[27.602, "o", "c"] -[27.63, "o", "t"] -[27.658, "o", "s"] -[27.686, "o", "/"] -[27.714, "o", "\u001b"] -[27.742, "o", "["] -[27.77, "o", "0"] -[27.798, "o", "m"] -[27.826, "o", "\r\n"] -[28.176, "o", "[{\"id\":\"d2d14b5c-8026-421a-b027-cdc0b6c5ae63\",\"name\":\"My first project\",\"user_id\":\"c3f365ce-...\"}]\r\n"] -[29.066, "o", "\u001b[32m$\u001b[0m "] -[29.066, "o", "\u001b"] -[29.082, "o", "["] -[29.098, "o", "9"] -[29.114, "o", "0"] -[29.13, "o", "m"] -[29.146, "o", "#"] -[29.162, "o", " "] -[29.178, "o", "W"] -[29.194, "o", "i"] -[29.21, "o", "t"] -[29.226, "o", "h"] -[29.242, "o", "o"] -[29.258, "o", "u"] -[29.274, "o", "t"] -[29.29, "o", " "] -[29.306, "o", "t"] -[29.322, "o", "h"] -[29.338, "o", "e"] -[29.354, "o", " "] -[29.37, "o", "c"] -[29.386, "o", "o"] -[29.402, "o", "o"] -[29.418, "o", "k"] -[29.434, "o", "i"] -[29.45, "o", "e"] -[29.466, "o", ","] -[29.482, "o", " "] -[29.498, "o", "t"] -[29.514, "o", "h"] -[29.53, "o", "e"] -[29.546, "o", " "] -[29.562, "o", "A"] -[29.578, "o", "P"] -[29.594, "o", "I"] -[29.61, "o", " "] -[29.626, "o", "r"] -[29.642, "o", "e"] -[29.658, "o", "f"] -[29.674, "o", "u"] -[29.69, "o", "s"] -[29.706, "o", "e"] -[29.722, "o", "s"] -[29.738, "o", "\u001b"] -[29.754, "o", "["] -[29.77, "o", "0"] -[29.786, "o", "m"] -[29.802, "o", "\r\n"] -[30.152, "o", "\u001b[32m$\u001b[0m "] -[30.152, "o", "\u001b"] -[30.18, "o", "["] -[30.208, "o", "3"] -[30.236, "o", "6"] -[30.264, "o", "m"] -[30.292, "o", "c"] -[30.32, "o", "u"] -[30.348, "o", "r"] -[30.376, "o", "l"] -[30.404, "o", " "] -[30.432, "o", "l"] -[30.46, "o", "o"] -[30.488, "o", "c"] -[30.516, "o", "a"] -[30.544, "o", "l"] -[30.572, "o", "h"] -[30.6, "o", "o"] -[30.628, "o", "s"] -[30.656, "o", "t"] -[30.684, "o", ":"] -[30.712, "o", "5"] -[30.74, "o", "0"] -[30.768, "o", "0"] -[30.796, "o", "0"] -[30.824, "o", "/"] -[30.852, "o", "a"] -[30.88, "o", "p"] -[30.908, "o", "i"] -[30.936, "o", "/"] -[30.964, "o", "p"] -[30.992, "o", "r"] -[31.02, "o", "o"] -[31.048, "o", "j"] -[31.076, "o", "e"] -[31.104, "o", "c"] -[31.132, "o", "t"] -[31.16, "o", "s"] -[31.188, "o", "/"] -[31.216, "o", "\u001b"] -[31.244, "o", "["] -[31.272, "o", "0"] -[31.3, "o", "m"] -[31.328, "o", "\r\n"] -[31.678, "o", "\u001b[33m{\"msg\":\"Missing cookie \\\"access_token_cookie\\\"\"}\u001b[0m\r\n"] +[20.348, "o", "n"] +[20.374, "o", "t"] +[20.4, "o", "e"] +[20.426, "o", "r"] +[20.452, "o", "\""] +[20.478, "o", "}"] +[20.504, "o", "'"] +[20.53, "o", "["] +[20.556, "o", "0"] +[20.582, "o", "m"] +[20.608, "o", "\r\n"] +[20.928, "o", "{\"user\":{\"email\":\"you@example.com\",\"id\":\"c3f365ce-dd75-47c1-a26b-9b0fe928369c\"}}\r\n"] +[21.763, "o", "[32m$[0m "] +[21.763, "o", "["] +[21.778, "o", "9"] +[21.793, "o", "0"] +[21.808, "o", "m"] +[21.823, "o", "#"] +[21.838, "o", " "] +[21.853, "o", "C"] +[21.868, "o", "r"] +[21.883, "o", "e"] +[21.898, "o", "a"] +[21.913, "o", "t"] +[21.928, "o", "e"] +[21.943, "o", " "] +[21.958, "o", "a"] +[21.973, "o", " "] +[21.988, "o", "p"] +[22.003, "o", "r"] +[22.018, "o", "o"] +[22.033, "o", "j"] +[22.048, "o", "e"] +[22.063, "o", "c"] +[22.078, "o", "t"] +[22.093, "o", " "] +[22.108, "o", "—"] +[22.123, "o", " "] +[22.138, "o", "a"] +[22.153, "o", "u"] +[22.168, "o", "t"] +[22.183, "o", "h"] +[22.198, "o", " "] +[22.213, "o", "r"] +[22.228, "o", "e"] +[22.243, "o", "q"] +[22.258, "o", "u"] +[22.273, "o", "i"] +[22.288, "o", "r"] +[22.303, "o", "e"] +[22.318, "o", "d"] +[22.333, "o", ","] +[22.348, "o", " "] +[22.363, "o", "r"] +[22.378, "o", "o"] +[22.393, "o", "w"] +[22.408, "o", " "] +[22.423, "o", "s"] +[22.438, "o", "c"] +[22.453, "o", "o"] +[22.468, "o", "p"] +[22.483, "o", "e"] +[22.498, "o", "d"] +[22.513, "o", " "] +[22.528, "o", "t"] +[22.543, "o", "o"] +[22.558, "o", " "] +[22.573, "o", "t"] +[22.588, "o", "h"] +[22.603, "o", "i"] +[22.618, "o", "s"] +[22.633, "o", " "] +[22.648, "o", "u"] +[22.663, "o", "s"] +[22.678, "o", "e"] +[22.693, "o", "r"] +[22.708, "o", "["] +[22.723, "o", "0"] +[22.738, "o", "m"] +[22.753, "o", "\r\n"] +[23.073, "o", "[32m$[0m "] +[23.073, "o", "["] +[23.099, "o", "3"] +[23.125, "o", "6"] +[23.151, "o", "m"] +[23.177, "o", "c"] +[23.203, "o", "u"] +[23.229, "o", "r"] +[23.255, "o", "l"] +[23.281, "o", " "] +[23.307, "o", "-"] +[23.333, "o", "b"] +[23.359, "o", " "] +[23.385, "o", "c"] +[23.411, "o", "o"] +[23.437, "o", "o"] +[23.463, "o", "k"] +[23.489, "o", "i"] +[23.515, "o", "e"] +[23.541, "o", "s"] +[23.567, "o", "."] +[23.593, "o", "t"] +[23.619, "o", "x"] +[23.645, "o", "t"] +[23.671, "o", " "] +[23.697, "o", "-"] +[23.723, "o", "X"] +[23.749, "o", " "] +[23.775, "o", "P"] +[23.801, "o", "O"] +[23.827, "o", "S"] +[23.853, "o", "T"] +[23.879, "o", " "] +[23.905, "o", "l"] +[23.931, "o", "o"] +[23.957, "o", "c"] +[23.983, "o", "a"] +[24.009, "o", "l"] +[24.035, "o", "h"] +[24.061, "o", "o"] +[24.087, "o", "s"] +[24.113, "o", "t"] +[24.139, "o", ":"] +[24.165, "o", "5"] +[24.191, "o", "0"] +[24.217, "o", "0"] +[24.243, "o", "0"] +[24.269, "o", "/"] +[24.295, "o", "a"] +[24.321, "o", "p"] +[24.347, "o", "i"] +[24.373, "o", "/"] +[24.399, "o", "p"] +[24.425, "o", "r"] +[24.451, "o", "o"] +[24.477, "o", "j"] +[24.503, "o", "e"] +[24.529, "o", "c"] +[24.555, "o", "t"] +[24.581, "o", "s"] +[24.607, "o", "/"] +[24.633, "o", " "] +[24.659, "o", "-"] +[24.685, "o", "d"] +[24.711, "o", " "] +[24.737, "o", "'"] +[24.763, "o", "{"] +[24.789, "o", "\""] +[24.815, "o", "n"] +[24.841, "o", "a"] +[24.867, "o", "m"] +[24.893, "o", "e"] +[24.919, "o", "\""] +[24.945, "o", ":"] +[24.971, "o", "\""] +[24.997, "o", "M"] +[25.023, "o", "y"] +[25.049, "o", " "] +[25.075, "o", "f"] +[25.101, "o", "i"] +[25.127, "o", "r"] +[25.153, "o", "s"] +[25.179, "o", "t"] +[25.205, "o", " "] +[25.231, "o", "p"] +[25.257, "o", "r"] +[25.283, "o", "o"] +[25.309, "o", "j"] +[25.335, "o", "e"] +[25.361, "o", "c"] +[25.387, "o", "t"] +[25.413, "o", "\""] +[25.439, "o", "}"] +[25.465, "o", "'"] +[25.491, "o", "["] +[25.517, "o", "0"] +[25.543, "o", "m"] +[25.569, "o", "\r\n"] +[25.889, "o", "{\"id\":\"d2d14b5c-8026-421a-b027-cdc0b6c5ae63\",\"name\":\"My first project\",\r\n"] +[25.924, "o", " \"user_id\":\"c3f365ce-dd75-47c1-a26b-9b0fe928369c\",\"status\":null}\r\n"] +[26.759, "o", "[32m$[0m "] +[26.759, "o", "["] +[26.774, "o", "9"] +[26.789, "o", "0"] +[26.804, "o", "m"] +[26.819, "o", "#"] +[26.834, "o", " "] +[26.849, "o", "L"] +[26.864, "o", "i"] +[26.879, "o", "s"] +[26.894, "o", "t"] +[26.909, "o", " "] +[26.924, "o", "—"] +[26.939, "o", " "] +[26.954, "o", "r"] +[26.969, "o", "e"] +[26.984, "o", "t"] +[26.999, "o", "u"] +[27.014, "o", "r"] +[27.029, "o", "n"] +[27.044, "o", "s"] +[27.059, "o", " "] +[27.074, "o", "o"] +[27.089, "o", "n"] +[27.104, "o", "l"] +[27.119, "o", "y"] +[27.134, "o", " "] +[27.149, "o", "y"] +[27.164, "o", "o"] +[27.179, "o", "u"] +[27.194, "o", "r"] +[27.209, "o", " "] +[27.224, "o", "r"] +[27.239, "o", "o"] +[27.254, "o", "w"] +[27.269, "o", "s"] +[27.284, "o", "["] +[27.299, "o", "0"] +[27.314, "o", "m"] +[27.329, "o", "\r\n"] +[27.649, "o", "[32m$[0m "] +[27.649, "o", "["] +[27.675, "o", "3"] +[27.701, "o", "6"] +[27.727, "o", "m"] +[27.753, "o", "c"] +[27.779, "o", "u"] +[27.805, "o", "r"] +[27.831, "o", "l"] +[27.857, "o", " "] +[27.883, "o", "-"] +[27.909, "o", "b"] +[27.935, "o", " "] +[27.961, "o", "c"] +[27.987, "o", "o"] +[28.013, "o", "o"] +[28.039, "o", "k"] +[28.065, "o", "i"] +[28.091, "o", "e"] +[28.117, "o", "s"] +[28.143, "o", "."] +[28.169, "o", "t"] +[28.195, "o", "x"] +[28.221, "o", "t"] +[28.247, "o", " "] +[28.273, "o", "l"] +[28.299, "o", "o"] +[28.325, "o", "c"] +[28.351, "o", "a"] +[28.377, "o", "l"] +[28.403, "o", "h"] +[28.429, "o", "o"] +[28.455, "o", "s"] +[28.481, "o", "t"] +[28.507, "o", ":"] +[28.533, "o", "5"] +[28.559, "o", "0"] +[28.585, "o", "0"] +[28.611, "o", "0"] +[28.637, "o", "/"] +[28.663, "o", "a"] +[28.689, "o", "p"] +[28.715, "o", "i"] +[28.741, "o", "/"] +[28.767, "o", "p"] +[28.793, "o", "r"] +[28.819, "o", "o"] +[28.845, "o", "j"] +[28.871, "o", "e"] +[28.897, "o", "c"] +[28.923, "o", "t"] +[28.949, "o", "s"] +[28.975, "o", "/"] +[29.001, "o", "["] +[29.027, "o", "0"] +[29.053, "o", "m"] +[29.079, "o", "\r\n"] +[29.399, "o", "[{\"id\":\"d2d14b5c-...\",\"name\":\"My first project\",\"user_id\":\"c3f365ce-...\"}]\r\n"] +[30.234, "o", "[32m$[0m "] +[30.234, "o", "["] +[30.249, "o", "9"] +[30.264, "o", "0"] +[30.279, "o", "m"] +[30.294, "o", "#"] +[30.309, "o", " "] +[30.324, "o", "W"] +[30.339, "o", "i"] +[30.354, "o", "t"] +[30.369, "o", "h"] +[30.384, "o", "o"] +[30.399, "o", "u"] +[30.414, "o", "t"] +[30.429, "o", " "] +[30.444, "o", "t"] +[30.459, "o", "h"] +[30.474, "o", "e"] +[30.489, "o", " "] +[30.504, "o", "c"] +[30.519, "o", "o"] +[30.534, "o", "o"] +[30.549, "o", "k"] +[30.564, "o", "i"] +[30.579, "o", "e"] +[30.594, "o", ","] +[30.609, "o", " "] +[30.624, "o", "t"] +[30.639, "o", "h"] +[30.654, "o", "e"] +[30.669, "o", " "] +[30.684, "o", "A"] +[30.699, "o", "P"] +[30.714, "o", "I"] +[30.729, "o", " "] +[30.744, "o", "r"] +[30.759, "o", "e"] +[30.774, "o", "f"] +[30.789, "o", "u"] +[30.804, "o", "s"] +[30.819, "o", "e"] +[30.834, "o", "s"] +[30.849, "o", "["] +[30.864, "o", "0"] +[30.879, "o", "m"] +[30.894, "o", "\r\n"] +[31.214, "o", "[32m$[0m "] +[31.214, "o", "["] +[31.24, "o", "3"] +[31.266, "o", "6"] +[31.292, "o", "m"] +[31.318, "o", "c"] +[31.344, "o", "u"] +[31.37, "o", "r"] +[31.396, "o", "l"] +[31.422, "o", " "] +[31.448, "o", "l"] +[31.474, "o", "o"] +[31.5, "o", "c"] +[31.526, "o", "a"] +[31.552, "o", "l"] +[31.578, "o", "h"] +[31.604, "o", "o"] +[31.63, "o", "s"] +[31.656, "o", "t"] +[31.682, "o", ":"] +[31.708, "o", "5"] +[31.734, "o", "0"] +[31.76, "o", "0"] +[31.786, "o", "0"] +[31.812, "o", "/"] +[31.838, "o", "a"] +[31.864, "o", "p"] +[31.89, "o", "i"] +[31.916, "o", "/"] +[31.942, "o", "p"] +[31.968, "o", "r"] +[31.994, "o", "o"] +[32.02, "o", "j"] +[32.046, "o", "e"] +[32.072, "o", "c"] +[32.098, "o", "t"] +[32.124, "o", "s"] +[32.15, "o", "/"] +[32.176, "o", "["] +[32.202, "o", "0"] +[32.228, "o", "m"] +[32.254, "o", "\r\n"] +[32.574, "o", "[33m{\"msg\":\"Missing cookie \\\"access_token_cookie\\\"\"}[0m\r\n"] diff --git a/demo.svg b/demo.svg index 00ad63f..450eba6 100644 --- a/demo.svg +++ b/demo.svg @@ -1 +1 @@ -$$#$#1.$#1.Generate$#1.Generatea$#1.GenerateaFlask$#1.GenerateaFlask+$#1.GenerateaFlask+Postgres$#1.GenerateaFlask+Postgresapp$#1.GenerateaFlask+Postgresappfrom$#1.GenerateaFlask+Postgresappfroma$#1.GenerateaFlask+Postgresappfromaplain-English$#1.GenerateaFlask+Postgresappfromaplain-EnglishPRD$python$pythonmicrocodegen.py$pythonmicrocodegen.pyexamples/task_manager.md$pythonmicrocodegen.pyexamples/task_manager.md--out$pythonmicrocodegen.pyexamples/task_manager.md--out./my-task-appWrote25filestomy-task-app$#2.$#2.Boot$#2.Bootit$#2.Bootit$#2.Bootithealthcheck-gated,$#2.Bootithealthcheck-gated,zero$#2.Bootithealthcheck-gated,zeroedits,$#2.Bootithealthcheck-gated,zeroedits,zero$#2.Bootithealthcheck-gated,zeroedits,zeroAPI$#2.Bootithealthcheck-gated,zeroedits,zeroAPIkeys$c$cd$cdmy-task-app$cdmy-task-app&&$cdmy-task-app&&docker$cdmy-task-app&&dockercompose$cdmy-task-app&&dockercomposeup$cdmy-task-app&&dockercomposeup-d$cdmy-task-app&&dockercomposeup-d--buildContainermy-task-app-db-1HealthyContainermy-task-app-app-1Started$#3.$#3.It's$#3.It'slive$cu$cur$curl$curll$curllo$curlloc$curlloca$curllocal$curllocalh$curllocalho$curllocalhos$curllocalhost$curllocalhost:$curllocalhost:5$curllocalhost:50$curllocalhost:500$curllocalhost:5000$curllocalhost:5000/$curllocalhost:5000/a$curllocalhost:5000/ap$curllocalhost:5000/api$curllocalhost:5000/api/$curllocalhost:5000/api/health{"status":"ok","version":"task_manager_saa_s"}$#Register$#Register$#Registerissues$#Registerissuesa$#RegisterissuesaJWT$#RegisterissuesaJWTin$#RegisterissuesaJWTinan$#RegisterissuesaJWTinanhttpOnly$#RegisterissuesaJWTinanhttpOnlycookie$#RegisterissuesaJWTinanhttpOnlycookie(never$#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStorage)$curl-$curl-c$curl-ccookies.txt$curl-ccookies.txt-X$curl-ccookies.txt-XPOST$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/register$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/register\-d-d'{"email":"you@example.com","password":"hunter22hunter"}'{"user":{"email":"you@example.com","id":"c3f365ce-dd75-47c1-a26b-9b0fe928369c"}}$#Create$#Createa$#Createaproject$#Createaproject$#Createaprojectauth$#Createaprojectauthrequired,$#Createaprojectauthrequired,row$#Createaprojectauthrequired,rowscoped$#Createaprojectauthrequired,rowscopedto$#Createaprojectauthrequired,rowscopedtothis$#Createaprojectauthrequired,rowscopedtothisuser$curl-b$curl-bc$curl-bco$curl-bcoo$curl-bcook$curl-bcooki$curl-bcookie$curl-bcookies$curl-bcookies.$curl-bcookies.t$curl-bcookies.tx$curl-bcookies.txt$curl-bcookies.txt-X$curl-bcookies.txt-XPOST$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"My$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirst$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstproject"}'{"id":"d2d14b5c-8026-421a-b027-cdc0b6c5ae63","name":"Myfirstproject","user_id":"c3f365ce-dd75-47c1-a26b-9b0fe928369c","status":null,"description":null,"color":null}$#List$#List$#Listreturns$#Listreturnsonly$#Listreturnsonlyyour$#Listreturnsonlyyourrows$curl-bcookies.txtlocalhost:5000/api/projects/[{"id":"d2d14b5c-8026-421a-b027-cdc0b6c5ae63","name":"Myfirstproject","user_id":"c3f365ce-..."}]$#Without$#Withoutthe$#Withoutthecookie,$#Withoutthecookie,the$#Withoutthecookie,theAPI$#Withoutthecookie,theAPIrefuses$curllocalhost:5000/api/projects/$#1$#1.G$#1.Ge$#1.Gen$#1.Gene$#1.Gener$#1.Genera$#1.Generat$#1.GenerateaF$#1.GenerateaFl$#1.GenerateaFla$#1.GenerateaFlas$#1.GenerateaFlask+P$#1.GenerateaFlask+Po$#1.GenerateaFlask+Pos$#1.GenerateaFlask+Post$#1.GenerateaFlask+Postg$#1.GenerateaFlask+Postgr$#1.GenerateaFlask+Postgre$#1.GenerateaFlask+Postgresa$#1.GenerateaFlask+Postgresap$#1.GenerateaFlask+Postgresappf$#1.GenerateaFlask+Postgresappfr$#1.GenerateaFlask+Postgresappfro$#1.GenerateaFlask+Postgresappfromap$#1.GenerateaFlask+Postgresappfromapl$#1.GenerateaFlask+Postgresappfromapla$#1.GenerateaFlask+Postgresappfromaplai$#1.GenerateaFlask+Postgresappfromaplain$#1.GenerateaFlask+Postgresappfromaplain-$#1.GenerateaFlask+Postgresappfromaplain-E$#1.GenerateaFlask+Postgresappfromaplain-En$#1.GenerateaFlask+Postgresappfromaplain-Eng$#1.GenerateaFlask+Postgresappfromaplain-Engl$#1.GenerateaFlask+Postgresappfromaplain-Engli$#1.GenerateaFlask+Postgresappfromaplain-Englis$#1.GenerateaFlask+Postgresappfromaplain-EnglishP$#1.GenerateaFlask+Postgresappfromaplain-EnglishPR$p$py$pyt$pyth$pytho$pythonm$pythonmi$pythonmic$pythonmicr$pythonmicro$pythonmicroc$pythonmicroco$pythonmicrocod$pythonmicrocode$pythonmicrocodeg$pythonmicrocodege$pythonmicrocodegen$pythonmicrocodegen.$pythonmicrocodegen.p$pythonmicrocodegen.pye$pythonmicrocodegen.pyex$pythonmicrocodegen.pyexa$pythonmicrocodegen.pyexam$pythonmicrocodegen.pyexamp$pythonmicrocodegen.pyexampl$pythonmicrocodegen.pyexample$pythonmicrocodegen.pyexamples$pythonmicrocodegen.pyexamples/$pythonmicrocodegen.pyexamples/t$pythonmicrocodegen.pyexamples/ta$pythonmicrocodegen.pyexamples/tas$pythonmicrocodegen.pyexamples/task$pythonmicrocodegen.pyexamples/task_$pythonmicrocodegen.pyexamples/task_m$pythonmicrocodegen.pyexamples/task_ma$pythonmicrocodegen.pyexamples/task_man$pythonmicrocodegen.pyexamples/task_mana$pythonmicrocodegen.pyexamples/task_manag$pythonmicrocodegen.pyexamples/task_manage$pythonmicrocodegen.pyexamples/task_manager$pythonmicrocodegen.pyexamples/task_manager.$pythonmicrocodegen.pyexamples/task_manager.m$pythonmicrocodegen.pyexamples/task_manager.md-$pythonmicrocodegen.pyexamples/task_manager.md--$pythonmicrocodegen.pyexamples/task_manager.md--o$pythonmicrocodegen.pyexamples/task_manager.md--ou$pythonmicrocodegen.pyexamples/task_manager.md--out.$pythonmicrocodegen.pyexamples/task_manager.md--out./$pythonmicrocodegen.pyexamples/task_manager.md--out./m$pythonmicrocodegen.pyexamples/task_manager.md--out./my$pythonmicrocodegen.pyexamples/task_manager.md--out./my-$pythonmicrocodegen.pyexamples/task_manager.md--out./my-t$pythonmicrocodegen.pyexamples/task_manager.md--out./my-ta$pythonmicrocodegen.pyexamples/task_manager.md--out./my-tas$pythonmicrocodegen.pyexamples/task_manager.md--out./my-task$pythonmicrocodegen.pyexamples/task_manager.md--out./my-task-$pythonmicrocodegen.pyexamples/task_manager.md--out./my-task-a$pythonmicrocodegen.pyexamples/task_manager.md--out./my-task-ap$#2$#2.B$#2.Bo$#2.Boo$#2.Booti$#2.Bootith$#2.Bootithe$#2.Bootithea$#2.Bootitheal$#2.Bootithealt$#2.Bootithealth$#2.Bootithealthc$#2.Bootithealthch$#2.Bootithealthche$#2.Bootithealthchec$#2.Bootithealthcheck$#2.Bootithealthcheck-$#2.Bootithealthcheck-g$#2.Bootithealthcheck-ga$#2.Bootithealthcheck-gat$#2.Bootithealthcheck-gate$#2.Bootithealthcheck-gated$#2.Bootithealthcheck-gated,z$#2.Bootithealthcheck-gated,ze$#2.Bootithealthcheck-gated,zer$#2.Bootithealthcheck-gated,zeroe$#2.Bootithealthcheck-gated,zeroed$#2.Bootithealthcheck-gated,zeroedi$#2.Bootithealthcheck-gated,zeroedit$#2.Bootithealthcheck-gated,zeroedits$#2.Bootithealthcheck-gated,zeroedits,z$#2.Bootithealthcheck-gated,zeroedits,ze$#2.Bootithealthcheck-gated,zeroedits,zer$#2.Bootithealthcheck-gated,zeroedits,zeroA$#2.Bootithealthcheck-gated,zeroedits,zeroAP$#2.Bootithealthcheck-gated,zeroedits,zeroAPIk$#2.Bootithealthcheck-gated,zeroedits,zeroAPIke$#2.Bootithealthcheck-gated,zeroedits,zeroAPIkey$cdm$cdmy$cdmy-$cdmy-t$cdmy-ta$cdmy-tas$cdmy-task$cdmy-task-$cdmy-task-a$cdmy-task-ap$cdmy-task-app&$cdmy-task-app&&d$cdmy-task-app&&do$cdmy-task-app&&doc$cdmy-task-app&&dock$cdmy-task-app&&docke$cdmy-task-app&&dockerc$cdmy-task-app&&dockerco$cdmy-task-app&&dockercom$cdmy-task-app&&dockercomp$cdmy-task-app&&dockercompo$cdmy-task-app&&dockercompos$cdmy-task-app&&dockercomposeu$cdmy-task-app&&dockercomposeup-$cdmy-task-app&&dockercomposeup-d-$cdmy-task-app&&dockercomposeup-d--$cdmy-task-app&&dockercomposeup-d--b$cdmy-task-app&&dockercomposeup-d--bu$cdmy-task-app&&dockercomposeup-d--bui$cdmy-task-app&&dockercomposeup-d--buil$#3$#3.I$#3.It$#3.It'$#3.It'sl$#3.It'sli$#3.It'sliv$curllocalhost:5000/api/h$curllocalhost:5000/api/he$curllocalhost:5000/api/hea$curllocalhost:5000/api/heal$curllocalhost:5000/api/healt$#R$#Re$#Reg$#Regi$#Regis$#Regist$#Registe$#Registeri$#Registeris$#Registeriss$#Registerissu$#Registerissue$#RegisterissuesaJ$#RegisterissuesaJW$#RegisterissuesaJWTi$#RegisterissuesaJWTina$#RegisterissuesaJWTinanh$#RegisterissuesaJWTinanht$#RegisterissuesaJWTinanhtt$#RegisterissuesaJWTinanhttp$#RegisterissuesaJWTinanhttpO$#RegisterissuesaJWTinanhttpOn$#RegisterissuesaJWTinanhttpOnl$#RegisterissuesaJWTinanhttpOnlyc$#RegisterissuesaJWTinanhttpOnlyco$#RegisterissuesaJWTinanhttpOnlycoo$#RegisterissuesaJWTinanhttpOnlycook$#RegisterissuesaJWTinanhttpOnlycooki$#RegisterissuesaJWTinanhttpOnlycookie($#RegisterissuesaJWTinanhttpOnlycookie(n$#RegisterissuesaJWTinanhttpOnlycookie(ne$#RegisterissuesaJWTinanhttpOnlycookie(nev$#RegisterissuesaJWTinanhttpOnlycookie(neve$#RegisterissuesaJWTinanhttpOnlycookie(neverl$#RegisterissuesaJWTinanhttpOnlycookie(neverlo$#RegisterissuesaJWTinanhttpOnlycookie(neverloc$#RegisterissuesaJWTinanhttpOnlycookie(neverloca$#RegisterissuesaJWTinanhttpOnlycookie(neverlocal$#RegisterissuesaJWTinanhttpOnlycookie(neverlocalS$#RegisterissuesaJWTinanhttpOnlycookie(neverlocalSt$#RegisterissuesaJWTinanhttpOnlycookie(neverlocalSto$#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStor$#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStora$#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStorag$#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStorage$curl-cc$curl-cco$curl-ccoo$curl-ccook$curl-ccooki$curl-ccookie$curl-ccookies$curl-ccookies.$curl-ccookies.t$curl-ccookies.tx$curl-ccookies.txt-$curl-ccookies.txt-XP$curl-ccookies.txt-XPO$curl-ccookies.txt-XPOS$curl-ccookies.txt-XPOSTl$curl-ccookies.txt-XPOSTlo$curl-ccookies.txt-XPOSTloc$curl-ccookies.txt-XPOSTloca$curl-ccookies.txt-XPOSTlocal$curl-ccookies.txt-XPOSTlocalh$curl-ccookies.txt-XPOSTlocalho$curl-ccookies.txt-XPOSTlocalhos$curl-ccookies.txt-XPOSTlocalhost$curl-ccookies.txt-XPOSTlocalhost:$curl-ccookies.txt-XPOSTlocalhost:5$curl-ccookies.txt-XPOSTlocalhost:50$curl-ccookies.txt-XPOSTlocalhost:500$curl-ccookies.txt-XPOSTlocalhost:5000$curl-ccookies.txt-XPOSTlocalhost:5000/$curl-ccookies.txt-XPOSTlocalhost:5000/a$curl-ccookies.txt-XPOSTlocalhost:5000/ap$curl-ccookies.txt-XPOSTlocalhost:5000/api$curl-ccookies.txt-XPOSTlocalhost:5000/api/$curl-ccookies.txt-XPOSTlocalhost:5000/api/a$curl-ccookies.txt-XPOSTlocalhost:5000/api/au$curl-ccookies.txt-XPOSTlocalhost:5000/api/aut$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/r$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/re$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/reg$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/regi$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/regis$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/regist$curl-ccookies.txt-XPOSTlocalhost:5000/api/auth/registe--d'-d'{-d'{"-d'{"e-d'{"em-d'{"ema-d'{"emai-d'{"email-d'{"email"-d'{"email":-d'{"email":"-d'{"email":"y-d'{"email":"yo-d'{"email":"you-d'{"email":"you@-d'{"email":"you@e-d'{"email":"you@ex-d'{"email":"you@exa-d'{"email":"you@exam-d'{"email":"you@examp-d'{"email":"you@exampl-d'{"email":"you@example-d'{"email":"you@example.-d'{"email":"you@example.c-d'{"email":"you@example.co-d'{"email":"you@example.com-d'{"email":"you@example.com"-d'{"email":"you@example.com",-d'{"email":"you@example.com","-d'{"email":"you@example.com","p-d'{"email":"you@example.com","pa-d'{"email":"you@example.com","pas-d'{"email":"you@example.com","pass-d'{"email":"you@example.com","passw-d'{"email":"you@example.com","passwo-d'{"email":"you@example.com","passwor-d'{"email":"you@example.com","password-d'{"email":"you@example.com","password"-d'{"email":"you@example.com","password":-d'{"email":"you@example.com","password":"-d'{"email":"you@example.com","password":"h-d'{"email":"you@example.com","password":"hu-d'{"email":"you@example.com","password":"hun-d'{"email":"you@example.com","password":"hunt-d'{"email":"you@example.com","password":"hunte-d'{"email":"you@example.com","password":"hunter-d'{"email":"you@example.com","password":"hunter2-d'{"email":"you@example.com","password":"hunter22-d'{"email":"you@example.com","password":"hunter22h-d'{"email":"you@example.com","password":"hunter22hu-d'{"email":"you@example.com","password":"hunter22hun-d'{"email":"you@example.com","password":"hunter22hunt-d'{"email":"you@example.com","password":"hunter22hunte-d'{"email":"you@example.com","password":"hunter22hunter-d'{"email":"you@example.com","password":"hunter22hunter"-d'{"email":"you@example.com","password":"hunter22hunter"}$#C$#Cr$#Cre$#Crea$#Creat$#Createap$#Createapr$#Createapro$#Createaproj$#Createaproje$#Createaprojec$#Createaprojecta$#Createaprojectau$#Createaprojectaut$#Createaprojectauthr$#Createaprojectauthre$#Createaprojectauthreq$#Createaprojectauthrequ$#Createaprojectauthrequi$#Createaprojectauthrequir$#Createaprojectauthrequire$#Createaprojectauthrequired$#Createaprojectauthrequired,r$#Createaprojectauthrequired,ro$#Createaprojectauthrequired,rows$#Createaprojectauthrequired,rowsc$#Createaprojectauthrequired,rowsco$#Createaprojectauthrequired,rowscop$#Createaprojectauthrequired,rowscope$#Createaprojectauthrequired,rowscopedt$#Createaprojectauthrequired,rowscopedtot$#Createaprojectauthrequired,rowscopedtoth$#Createaprojectauthrequired,rowscopedtothi$#Createaprojectauthrequired,rowscopedtothisu$#Createaprojectauthrequired,rowscopedtothisus$#Createaprojectauthrequired,rowscopedtothisuse$curl-bcookies.txt-$curl-bcookies.txt-XP$curl-bcookies.txt-XPO$curl-bcookies.txt-XPOS$curl-bcookies.txt-XPOSTl$curl-bcookies.txt-XPOSTlo$curl-bcookies.txt-XPOSTloc$curl-bcookies.txt-XPOSTloca$curl-bcookies.txt-XPOSTlocal$curl-bcookies.txt-XPOSTlocalh$curl-bcookies.txt-XPOSTlocalho$curl-bcookies.txt-XPOSTlocalhos$curl-bcookies.txt-XPOSTlocalhost$curl-bcookies.txt-XPOSTlocalhost:$curl-bcookies.txt-XPOSTlocalhost:5$curl-bcookies.txt-XPOSTlocalhost:50$curl-bcookies.txt-XPOSTlocalhost:500$curl-bcookies.txt-XPOSTlocalhost:5000$curl-bcookies.txt-XPOSTlocalhost:5000/$curl-bcookies.txt-XPOSTlocalhost:5000/a$curl-bcookies.txt-XPOSTlocalhost:5000/ap$curl-bcookies.txt-XPOSTlocalhost:5000/api$curl-bcookies.txt-XPOSTlocalhost:5000/api/$curl-bcookies.txt-XPOSTlocalhost:5000/api/p$curl-bcookies.txt-XPOSTlocalhost:5000/api/pr$curl-bcookies.txt-XPOSTlocalhost:5000/api/pro$curl-bcookies.txt-XPOSTlocalhost:5000/api/proj$curl-bcookies.txt-XPOSTlocalhost:5000/api/proje$curl-bcookies.txt-XPOSTlocalhost:5000/api/projec$curl-bcookies.txt-XPOSTlocalhost:5000/api/project$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"n$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"na$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"nam$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name"$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"M$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myf$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfi$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfir$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirs$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstp$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstpr$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstpro$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstproj$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstproje$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstprojec$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstproject$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstproject"$curl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstproject"}$#L$#Li$#Lis$#Listr$#Listre$#Listret$#Listretu$#Listretur$#Listreturn$#Listreturnso$#Listreturnson$#Listreturnsonl$#Listreturnsonlyy$#Listreturnsonlyyo$#Listreturnsonlyyou$#Listreturnsonlyyourr$#Listreturnsonlyyourro$#Listreturnsonlyyourrow$curl-bcookies.txtl$curl-bcookies.txtlo$curl-bcookies.txtloc$curl-bcookies.txtloca$curl-bcookies.txtlocal$curl-bcookies.txtlocalh$curl-bcookies.txtlocalho$curl-bcookies.txtlocalhos$curl-bcookies.txtlocalhost$curl-bcookies.txtlocalhost:$curl-bcookies.txtlocalhost:5$curl-bcookies.txtlocalhost:50$curl-bcookies.txtlocalhost:500$curl-bcookies.txtlocalhost:5000$curl-bcookies.txtlocalhost:5000/$curl-bcookies.txtlocalhost:5000/a$curl-bcookies.txtlocalhost:5000/ap$curl-bcookies.txtlocalhost:5000/api$curl-bcookies.txtlocalhost:5000/api/$curl-bcookies.txtlocalhost:5000/api/p$curl-bcookies.txtlocalhost:5000/api/pr$curl-bcookies.txtlocalhost:5000/api/pro$curl-bcookies.txtlocalhost:5000/api/proj$curl-bcookies.txtlocalhost:5000/api/proje$curl-bcookies.txtlocalhost:5000/api/projec$curl-bcookies.txtlocalhost:5000/api/project$curl-bcookies.txtlocalhost:5000/api/projects$#W$#Wi$#Wit$#With$#Witho$#Withou$#Withoutt$#Withoutth$#Withoutthec$#Withouttheco$#Withoutthecoo$#Withoutthecook$#Withoutthecooki$#Withoutthecookie$#Withoutthecookie,t$#Withoutthecookie,th$#Withoutthecookie,theA$#Withoutthecookie,theAP$#Withoutthecookie,theAPIr$#Withoutthecookie,theAPIre$#Withoutthecookie,theAPIref$#Withoutthecookie,theAPIrefu$#Withoutthecookie,theAPIrefus$#Withoutthecookie,theAPIrefuse$curllocalhost:5000/api/p$curllocalhost:5000/api/pr$curllocalhost:5000/api/pro$curllocalhost:5000/api/proj$curllocalhost:5000/api/proje$curllocalhost:5000/api/projec$curllocalhost:5000/api/project$curllocalhost:5000/api/projects{"msg":"Missingcookie\"access_token_cookie\""} \ No newline at end of file +[32m$[0m[32m$[0m[[32m$[0m[9[32m$[0m[90[32m$[0m[90m[32m$[0m[90m#[32m$[0m[90m#1.[32m$[0m[90m#1.Generate[32m$[0m[90m#1.Generatea[32m$[0m[90m#1.GenerateaFlask[32m$[0m[90m#1.GenerateaFlask+[32m$[0m[90m#1.GenerateaFlask+Postgres[32m$[0m[90m#1.GenerateaFlask+Postgresapp[32m$[0m[90m#1.GenerateaFlask+Postgresappfrom[32m$[0m[90m#1.GenerateaFlask+Postgresappfroma[32m$[0m[90m#1.GenerateaFlask+Postgresappfromaplain-English[32m$[0m[90m#1.GenerateaFlask+Postgresappfromaplain-EnglishPRD[0m[32m$[0m[3[32m$[0m[36[32m$[0m[36m[32m$[0m[36mpython[32m$[0m[36mpythonmicrocodegen.py[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out./my-task-app[0mWrote25filestomy-task-app[32m$[0m[90m#A[32m$[0m[90m#Areal[32m$[0m[90m#Arealapp,[32m$[0m[90m#Arealapp,not[32m$[0m[90m#Arealapp,notan[32m$[0m[90m#Arealapp,notanempty[32m$[0m[90m#Arealapp,notanemptyskeleton[32m$[0m[90m#Arealapp,notanemptyskeleton[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specific[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specificcode[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specificcodeper[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specificcodepermodel:[0m[32m$[0m[36mtree[32m$[0m[36mtreemy-task-app[0m[34mmy-task-app/[0m├─wsgi.pyconfig.pyrequirements.txtDockerfiledocker-compose.yml.env.example├─README.mdGENOME.json[90m#GENOME.json=thearchitecturalIRitrenderedfrom[0m├─[34mapp/[0m├─__init__.py[90m#Flaskappfactory:blueprints,JWT,CORS,errorhandlers[0m├─database.py├─[34mblueprints/[0mauth_bpproject_bptask_bpcomment_bplabel_bp[90m#CRUD,@jwt_required[0m├─[34mmodels/[0muserprojecttaskcommentlabel[90m#user_idFK,per-tenant[0m└─[34mstatic/[0mindex.html[90m#click-throughregister/login/CRUDpage[0m└─[34mtests/[0mconftest.pytest_health.py[32m$[0m[90m#2.[32m$[0m[90m#2.Boot[32m$[0m[90m#2.Bootit[32m$[0m[90m#2.Bootit[32m$[0m[90m#2.Bootithealthcheck-gated,[32m$[0m[90m#2.Bootithealthcheck-gated,zero[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedits,[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedits,zero[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedits,zeroAPI[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedits,zeroAPIkeys[0m[32m$[0m[36mc[32m$[0m[36mcd[32m$[0m[36mcdmy-task-app[32m$[0m[36mcdmy-task-app&&[32m$[0m[36mcdmy-task-app&&docker[32m$[0m[36mcdmy-task-app&&dockercompose[32m$[0m[36mcdmy-task-app&&dockercomposeup[32m$[0m[36mcdmy-task-app&&dockercomposeup-d[32m$[0m[36mcdmy-task-app&&dockercomposeup-d--build[0m[32mContainermy-task-app-db-1Healthy[0m[32mContainermy-task-app-app-1Started[0m[32m$[0m[90m#3.[32m$[0m[90m#3.It's[32m$[0m[90m#3.It'slive[0m[32m$[0m[36mcu[32m$[0m[36mcur[32m$[0m[36mcurl[32m$[0m[36mcurll[32m$[0m[36mcurllo[32m$[0m[36mcurlloc[32m$[0m[36mcurlloca[32m$[0m[36mcurllocal[32m$[0m[36mcurllocalh[32m$[0m[36mcurllocalho[32m$[0m[36mcurllocalhos[32m$[0m[36mcurllocalhost[32m$[0m[36mcurllocalhost:[32m$[0m[36mcurllocalhost:5[32m$[0m[36mcurllocalhost:50[32m$[0m[36mcurllocalhost:500[32m$[0m[36mcurllocalhost:5000[32m$[0m[36mcurllocalhost:5000/[32m$[0m[36mcurllocalhost:5000/a[32m$[0m[36mcurllocalhost:5000/ap[32m$[0m[36mcurllocalhost:5000/api[32m$[0m[36mcurllocalhost:5000/api/[32m$[0m[36mcurllocalhost:5000/api/health[0m{"status":"ok","version":"task_manager_saa_s"}[32m$[0m[90m#Register[32m$[0m[90m#Register[32m$[0m[90m#Registerissues[32m$[0m[90m#Registerissuesa[32m$[0m[90m#RegisterissuesaJWT[32m$[0m[90m#RegisterissuesaJWTin[32m$[0m[90m#RegisterissuesaJWTinan[32m$[0m[90m#RegisterissuesaJWTinanhttpOnly[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(never[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStorage)[0m[32m$[0m[36mcurl-[32m$[0m[36mcurl-c[32m$[0m[36mcurl-ccookies.txt[32m$[0m[36mcurl-ccookies.txt-X[32m$[0m[36mcurl-ccookies.txt-XPOST[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/auth/register[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/auth/register\[0m[36m[36m-d[36m-d'{"email":"you@example.com","password":"hunter22hunter"}'[0m{"user":{"email":"you@example.com","id":"c3f365ce-dd75-47c1-a26b-9b0fe928369c"}}[32m$[0m[90m#Create[32m$[0m[90m#Createa[32m$[0m[90m#Createaproject[32m$[0m[90m#Createaproject[32m$[0m[90m#Createaprojectauth[32m$[0m[90m#Createaprojectauthrequired,[32m$[0m[90m#Createaprojectauthrequired,row[32m$[0m[90m#Createaprojectauthrequired,rowscoped[32m$[0m[90m#Createaprojectauthrequired,rowscopedto[32m$[0m[90m#Createaprojectauthrequired,rowscopedtothis[32m$[0m[90m#Createaprojectauthrequired,rowscopedtothisuser[0m[32m$[0m[36mcurl-b[32m$[0m[36mcurl-bc[32m$[0m[36mcurl-bco[32m$[0m[36mcurl-bcoo[32m$[0m[36mcurl-bcook[32m$[0m[36mcurl-bcooki[32m$[0m[36mcurl-bcookie[32m$[0m[36mcurl-bcookies[32m$[0m[36mcurl-bcookies.[32m$[0m[36mcurl-bcookies.t[32m$[0m[36mcurl-bcookies.tx[32m$[0m[36mcurl-bcookies.txt[32m$[0m[36mcurl-bcookies.txt-X[32m$[0m[36mcurl-bcookies.txt-XPOST[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"My[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirst[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstproject"}'[0m{"id":"d2d14b5c-8026-421a-b027-cdc0b6c5ae63","name":"Myfirstproject","user_id":"c3f365ce-dd75-47c1-a26b-9b0fe928369c","status":null}[32m$[0m[90m#List[32m$[0m[90m#List[32m$[0m[90m#Listreturns[32m$[0m[90m#Listreturnsonly[32m$[0m[90m#Listreturnsonlyyour[32m$[0m[90m#Listreturnsonlyyourrows[0m[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/api/projects/[0m[{"id":"d2d14b5c-...","name":"Myfirstproject","user_id":"c3f365ce-..."}][32m$[0m[90m#Without[32m$[0m[90m#Withoutthe[32m$[0m[90m#Withoutthecookie,[32m$[0m[90m#Withoutthecookie,the[32m$[0m[90m#Withoutthecookie,theAPI[32m$[0m[90m#Withoutthecookie,theAPIrefuses[0m[32m$[0m[36mcurllocalhost:5000/api/projects/[0m[32m$[0m[90m#1[32m$[0m[90m#1.G[32m$[0m[90m#1.Ge[32m$[0m[90m#1.Gen[32m$[0m[90m#1.Gene[32m$[0m[90m#1.Gener[32m$[0m[90m#1.Genera[32m$[0m[90m#1.Generat[32m$[0m[90m#1.GenerateaF[32m$[0m[90m#1.GenerateaFl[32m$[0m[90m#1.GenerateaFla[32m$[0m[90m#1.GenerateaFlas[32m$[0m[90m#1.GenerateaFlask+P[32m$[0m[90m#1.GenerateaFlask+Po[32m$[0m[90m#1.GenerateaFlask+Pos[32m$[0m[90m#1.GenerateaFlask+Post[32m$[0m[90m#1.GenerateaFlask+Postg[32m$[0m[90m#1.GenerateaFlask+Postgr[32m$[0m[90m#1.GenerateaFlask+Postgre[32m$[0m[90m#1.GenerateaFlask+Postgresa[32m$[0m[90m#1.GenerateaFlask+Postgresap[32m$[0m[90m#1.GenerateaFlask+Postgresappf[32m$[0m[90m#1.GenerateaFlask+Postgresappfr[32m$[0m[90m#1.GenerateaFlask+Postgresappfro[32m$[0m[90m#1.GenerateaFlask+Postgresappfromap[32m$[0m[90m#1.GenerateaFlask+Postgresappfromapl[32m$[0m[90m#1.GenerateaFlask+Postgresappfromapla[32m$[0m[90m#1.GenerateaFlask+Postgresappfromaplai[32m$[0m[90m#1.GenerateaFlask+Postgresappfromaplain[32m$[0m[90m#1.GenerateaFlask+Postgresappfromaplain-[32m$[0m[90m#1.GenerateaFlask+Postgresappfromaplain-E[32m$[0m[90m#1.GenerateaFlask+Postgresappfromaplain-En[32m$[0m[90m#1.GenerateaFlask+Postgresappfromaplain-Eng[32m$[0m[90m#1.GenerateaFlask+Postgresappfromaplain-Engl[32m$[0m[90m#1.GenerateaFlask+Postgresappfromaplain-Engli[32m$[0m[90m#1.GenerateaFlask+Postgresappfromaplain-Englis[32m$[0m[90m#1.GenerateaFlask+Postgresappfromaplain-EnglishP[32m$[0m[90m#1.GenerateaFlask+Postgresappfromaplain-EnglishPR[32m$[0m[90m#1.GenerateaFlask+Postgresappfromaplain-EnglishPRD[32m$[0m[90m#1.GenerateaFlask+Postgresappfromaplain-EnglishPRD[[32m$[0m[90m#1.GenerateaFlask+Postgresappfromaplain-EnglishPRD[0[32m$[0m[36mp[32m$[0m[36mpy[32m$[0m[36mpyt[32m$[0m[36mpyth[32m$[0m[36mpytho[32m$[0m[36mpythonm[32m$[0m[36mpythonmi[32m$[0m[36mpythonmic[32m$[0m[36mpythonmicr[32m$[0m[36mpythonmicro[32m$[0m[36mpythonmicroc[32m$[0m[36mpythonmicroco[32m$[0m[36mpythonmicrocod[32m$[0m[36mpythonmicrocode[32m$[0m[36mpythonmicrocodeg[32m$[0m[36mpythonmicrocodege[32m$[0m[36mpythonmicrocodegen[32m$[0m[36mpythonmicrocodegen.[32m$[0m[36mpythonmicrocodegen.p[32m$[0m[36mpythonmicrocodegen.pye[32m$[0m[36mpythonmicrocodegen.pyex[32m$[0m[36mpythonmicrocodegen.pyexa[32m$[0m[36mpythonmicrocodegen.pyexam[32m$[0m[36mpythonmicrocodegen.pyexamp[32m$[0m[36mpythonmicrocodegen.pyexampl[32m$[0m[36mpythonmicrocodegen.pyexample[32m$[0m[36mpythonmicrocodegen.pyexamples[32m$[0m[36mpythonmicrocodegen.pyexamples/[32m$[0m[36mpythonmicrocodegen.pyexamples/t[32m$[0m[36mpythonmicrocodegen.pyexamples/ta[32m$[0m[36mpythonmicrocodegen.pyexamples/tas[32m$[0m[36mpythonmicrocodegen.pyexamples/task[32m$[0m[36mpythonmicrocodegen.pyexamples/task_[32m$[0m[36mpythonmicrocodegen.pyexamples/task_m[32m$[0m[36mpythonmicrocodegen.pyexamples/task_ma[32m$[0m[36mpythonmicrocodegen.pyexamples/task_man[32m$[0m[36mpythonmicrocodegen.pyexamples/task_mana[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manag[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manage[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.m[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md-[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--o[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--ou[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out.[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out./[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out./m[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out./my[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out./my-[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out./my-t[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out./my-ta[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out./my-tas[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out./my-task[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out./my-task-[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out./my-task-a[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out./my-task-ap[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out./my-task-app[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out./my-task-app[[32m$[0m[36mpythonmicrocodegen.pyexamples/task_manager.md--out./my-task-app[0[32m$[0m[90m#Ar[32m$[0m[90m#Are[32m$[0m[90m#Area[32m$[0m[90m#Areala[32m$[0m[90m#Arealap[32m$[0m[90m#Arealapp[32m$[0m[90m#Arealapp,n[32m$[0m[90m#Arealapp,no[32m$[0m[90m#Arealapp,nota[32m$[0m[90m#Arealapp,notane[32m$[0m[90m#Arealapp,notanem[32m$[0m[90m#Arealapp,notanemp[32m$[0m[90m#Arealapp,notanempt[32m$[0m[90m#Arealapp,notanemptys[32m$[0m[90m#Arealapp,notanemptysk[32m$[0m[90m#Arealapp,notanemptyske[32m$[0m[90m#Arealapp,notanemptyskel[32m$[0m[90m#Arealapp,notanemptyskele[32m$[0m[90m#Arealapp,notanemptyskelet[32m$[0m[90m#Arealapp,notanemptyskeleto[32m$[0m[90m#Arealapp,notanemptyskeletone[32m$[0m[90m#Arealapp,notanemptyskeletonen[32m$[0m[90m#Arealapp,notanemptyskeletonent[32m$[0m[90m#Arealapp,notanemptyskeletonenti[32m$[0m[90m#Arealapp,notanemptyskeletonentit[32m$[0m[90m#Arealapp,notanemptyskeletonentity[32m$[0m[90m#Arealapp,notanemptyskeletonentity-[32m$[0m[90m#Arealapp,notanemptyskeletonentity-s[32m$[0m[90m#Arealapp,notanemptyskeletonentity-sp[32m$[0m[90m#Arealapp,notanemptyskeletonentity-spe[32m$[0m[90m#Arealapp,notanemptyskeletonentity-spec[32m$[0m[90m#Arealapp,notanemptyskeletonentity-speci[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specif[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specifi[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specificc[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specificco[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specificcod[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specificcodep[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specificcodepe[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specificcodeperm[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specificcodepermo[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specificcodepermod[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specificcodepermode[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specificcodepermodel[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specificcodepermodel:[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specificcodepermodel:[[32m$[0m[90m#Arealapp,notanemptyskeletonentity-specificcodepermodel:[0[32m$[0m[36mt[32m$[0m[36mtr[32m$[0m[36mtre[32m$[0m[36mtreem[32m$[0m[36mtreemy[32m$[0m[36mtreemy-[32m$[0m[36mtreemy-t[32m$[0m[36mtreemy-ta[32m$[0m[36mtreemy-tas[32m$[0m[36mtreemy-task[32m$[0m[36mtreemy-task-[32m$[0m[36mtreemy-task-a[32m$[0m[36mtreemy-task-ap[32m$[0m[36mtreemy-task-app[32m$[0m[36mtreemy-task-app[[32m$[0m[36mtreemy-task-app[0[32m$[0m[90m#2[32m$[0m[90m#2.B[32m$[0m[90m#2.Bo[32m$[0m[90m#2.Boo[32m$[0m[90m#2.Booti[32m$[0m[90m#2.Bootith[32m$[0m[90m#2.Bootithe[32m$[0m[90m#2.Bootithea[32m$[0m[90m#2.Bootitheal[32m$[0m[90m#2.Bootithealt[32m$[0m[90m#2.Bootithealth[32m$[0m[90m#2.Bootithealthc[32m$[0m[90m#2.Bootithealthch[32m$[0m[90m#2.Bootithealthche[32m$[0m[90m#2.Bootithealthchec[32m$[0m[90m#2.Bootithealthcheck[32m$[0m[90m#2.Bootithealthcheck-[32m$[0m[90m#2.Bootithealthcheck-g[32m$[0m[90m#2.Bootithealthcheck-ga[32m$[0m[90m#2.Bootithealthcheck-gat[32m$[0m[90m#2.Bootithealthcheck-gate[32m$[0m[90m#2.Bootithealthcheck-gated[32m$[0m[90m#2.Bootithealthcheck-gated,z[32m$[0m[90m#2.Bootithealthcheck-gated,ze[32m$[0m[90m#2.Bootithealthcheck-gated,zer[32m$[0m[90m#2.Bootithealthcheck-gated,zeroe[32m$[0m[90m#2.Bootithealthcheck-gated,zeroed[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedi[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedit[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedits[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedits,z[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedits,ze[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedits,zer[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedits,zeroA[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedits,zeroAP[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedits,zeroAPIk[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedits,zeroAPIke[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedits,zeroAPIkey[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedits,zeroAPIkeys[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedits,zeroAPIkeys[[32m$[0m[90m#2.Bootithealthcheck-gated,zeroedits,zeroAPIkeys[0[32m$[0m[36mcdm[32m$[0m[36mcdmy[32m$[0m[36mcdmy-[32m$[0m[36mcdmy-t[32m$[0m[36mcdmy-ta[32m$[0m[36mcdmy-tas[32m$[0m[36mcdmy-task[32m$[0m[36mcdmy-task-[32m$[0m[36mcdmy-task-a[32m$[0m[36mcdmy-task-ap[32m$[0m[36mcdmy-task-app&[32m$[0m[36mcdmy-task-app&&d[32m$[0m[36mcdmy-task-app&&do[32m$[0m[36mcdmy-task-app&&doc[32m$[0m[36mcdmy-task-app&&dock[32m$[0m[36mcdmy-task-app&&docke[32m$[0m[36mcdmy-task-app&&dockerc[32m$[0m[36mcdmy-task-app&&dockerco[32m$[0m[36mcdmy-task-app&&dockercom[32m$[0m[36mcdmy-task-app&&dockercomp[32m$[0m[36mcdmy-task-app&&dockercompo[32m$[0m[36mcdmy-task-app&&dockercompos[32m$[0m[36mcdmy-task-app&&dockercomposeu[32m$[0m[36mcdmy-task-app&&dockercomposeup-[32m$[0m[36mcdmy-task-app&&dockercomposeup-d-[32m$[0m[36mcdmy-task-app&&dockercomposeup-d--[32m$[0m[36mcdmy-task-app&&dockercomposeup-d--b[32m$[0m[36mcdmy-task-app&&dockercomposeup-d--bu[32m$[0m[36mcdmy-task-app&&dockercomposeup-d--bui[32m$[0m[36mcdmy-task-app&&dockercomposeup-d--buil[32m$[0m[36mcdmy-task-app&&dockercomposeup-d--build[32m$[0m[36mcdmy-task-app&&dockercomposeup-d--build[[32m$[0m[36mcdmy-task-app&&dockercomposeup-d--build[0[32m$[0m[90m#3[32m$[0m[90m#3.I[32m$[0m[90m#3.It[32m$[0m[90m#3.It'[32m$[0m[90m#3.It'sl[32m$[0m[90m#3.It'sli[32m$[0m[90m#3.It'sliv[32m$[0m[90m#3.It'slive[32m$[0m[90m#3.It'slive[[32m$[0m[90m#3.It'slive[0[32m$[0m[36mcurllocalhost:5000/api/h[32m$[0m[36mcurllocalhost:5000/api/he[32m$[0m[36mcurllocalhost:5000/api/hea[32m$[0m[36mcurllocalhost:5000/api/heal[32m$[0m[36mcurllocalhost:5000/api/healt[32m$[0m[36mcurllocalhost:5000/api/health[32m$[0m[36mcurllocalhost:5000/api/health[[32m$[0m[36mcurllocalhost:5000/api/health[0[32m$[0m[90m#R[32m$[0m[90m#Re[32m$[0m[90m#Reg[32m$[0m[90m#Regi[32m$[0m[90m#Regis[32m$[0m[90m#Regist[32m$[0m[90m#Registe[32m$[0m[90m#Registeri[32m$[0m[90m#Registeris[32m$[0m[90m#Registeriss[32m$[0m[90m#Registerissu[32m$[0m[90m#Registerissue[32m$[0m[90m#RegisterissuesaJ[32m$[0m[90m#RegisterissuesaJW[32m$[0m[90m#RegisterissuesaJWTi[32m$[0m[90m#RegisterissuesaJWTina[32m$[0m[90m#RegisterissuesaJWTinanh[32m$[0m[90m#RegisterissuesaJWTinanht[32m$[0m[90m#RegisterissuesaJWTinanhtt[32m$[0m[90m#RegisterissuesaJWTinanhttp[32m$[0m[90m#RegisterissuesaJWTinanhttpO[32m$[0m[90m#RegisterissuesaJWTinanhttpOn[32m$[0m[90m#RegisterissuesaJWTinanhttpOnl[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlyc[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlyco[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycoo[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycook[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycooki[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie([32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(n[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(ne[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(nev[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neve[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neverl[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neverlo[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neverloc[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neverloca[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neverlocal[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neverlocalS[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neverlocalSt[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neverlocalSto[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStor[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStora[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStorag[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStorage[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStorage)[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStorage)[[32m$[0m[90m#RegisterissuesaJWTinanhttpOnlycookie(neverlocalStorage)[0[32m$[0m[36mcurl-cc[32m$[0m[36mcurl-cco[32m$[0m[36mcurl-ccoo[32m$[0m[36mcurl-ccook[32m$[0m[36mcurl-ccooki[32m$[0m[36mcurl-ccookie[32m$[0m[36mcurl-ccookies[32m$[0m[36mcurl-ccookies.[32m$[0m[36mcurl-ccookies.t[32m$[0m[36mcurl-ccookies.tx[32m$[0m[36mcurl-ccookies.txt-[32m$[0m[36mcurl-ccookies.txt-XP[32m$[0m[36mcurl-ccookies.txt-XPO[32m$[0m[36mcurl-ccookies.txt-XPOS[32m$[0m[36mcurl-ccookies.txt-XPOSTl[32m$[0m[36mcurl-ccookies.txt-XPOSTlo[32m$[0m[36mcurl-ccookies.txt-XPOSTloc[32m$[0m[36mcurl-ccookies.txt-XPOSTloca[32m$[0m[36mcurl-ccookies.txt-XPOSTlocal[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalh[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalho[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhos[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:50[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:500[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/a[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/ap[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/a[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/au[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/aut[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/auth[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/auth/[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/auth/r[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/auth/re[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/auth/reg[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/auth/regi[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/auth/regis[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/auth/regist[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/auth/registe[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/auth/register\[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/auth/register\[[32m$[0m[36mcurl-ccookies.txt-XPOSTlocalhost:5000/api/auth/register\[0[[3[36[36m-[36m-d'[36m-d'{[36m-d'{"[36m-d'{"e[36m-d'{"em[36m-d'{"ema[36m-d'{"emai[36m-d'{"email[36m-d'{"email"[36m-d'{"email":[36m-d'{"email":"[36m-d'{"email":"y[36m-d'{"email":"yo[36m-d'{"email":"you[36m-d'{"email":"you@[36m-d'{"email":"you@e[36m-d'{"email":"you@ex[36m-d'{"email":"you@exa[36m-d'{"email":"you@exam[36m-d'{"email":"you@examp[36m-d'{"email":"you@exampl[36m-d'{"email":"you@example[36m-d'{"email":"you@example.[36m-d'{"email":"you@example.c[36m-d'{"email":"you@example.co[36m-d'{"email":"you@example.com[36m-d'{"email":"you@example.com"[36m-d'{"email":"you@example.com",[36m-d'{"email":"you@example.com","[36m-d'{"email":"you@example.com","p[36m-d'{"email":"you@example.com","pa[36m-d'{"email":"you@example.com","pas[36m-d'{"email":"you@example.com","pass[36m-d'{"email":"you@example.com","passw[36m-d'{"email":"you@example.com","passwo[36m-d'{"email":"you@example.com","passwor[36m-d'{"email":"you@example.com","password[36m-d'{"email":"you@example.com","password"[36m-d'{"email":"you@example.com","password":[36m-d'{"email":"you@example.com","password":"[36m-d'{"email":"you@example.com","password":"h[36m-d'{"email":"you@example.com","password":"hu[36m-d'{"email":"you@example.com","password":"hun[36m-d'{"email":"you@example.com","password":"hunt[36m-d'{"email":"you@example.com","password":"hunte[36m-d'{"email":"you@example.com","password":"hunter[36m-d'{"email":"you@example.com","password":"hunter2[36m-d'{"email":"you@example.com","password":"hunter22[36m-d'{"email":"you@example.com","password":"hunter22h[36m-d'{"email":"you@example.com","password":"hunter22hu[36m-d'{"email":"you@example.com","password":"hunter22hun[36m-d'{"email":"you@example.com","password":"hunter22hunt[36m-d'{"email":"you@example.com","password":"hunter22hunte[36m-d'{"email":"you@example.com","password":"hunter22hunter[36m-d'{"email":"you@example.com","password":"hunter22hunter"[36m-d'{"email":"you@example.com","password":"hunter22hunter"}[36m-d'{"email":"you@example.com","password":"hunter22hunter"}'[36m-d'{"email":"you@example.com","password":"hunter22hunter"}'[[36m-d'{"email":"you@example.com","password":"hunter22hunter"}'[0[32m$[0m[90m#C[32m$[0m[90m#Cr[32m$[0m[90m#Cre[32m$[0m[90m#Crea[32m$[0m[90m#Creat[32m$[0m[90m#Createap[32m$[0m[90m#Createapr[32m$[0m[90m#Createapro[32m$[0m[90m#Createaproj[32m$[0m[90m#Createaproje[32m$[0m[90m#Createaprojec[32m$[0m[90m#Createaprojecta[32m$[0m[90m#Createaprojectau[32m$[0m[90m#Createaprojectaut[32m$[0m[90m#Createaprojectauthr[32m$[0m[90m#Createaprojectauthre[32m$[0m[90m#Createaprojectauthreq[32m$[0m[90m#Createaprojectauthrequ[32m$[0m[90m#Createaprojectauthrequi[32m$[0m[90m#Createaprojectauthrequir[32m$[0m[90m#Createaprojectauthrequire[32m$[0m[90m#Createaprojectauthrequired[32m$[0m[90m#Createaprojectauthrequired,r[32m$[0m[90m#Createaprojectauthrequired,ro[32m$[0m[90m#Createaprojectauthrequired,rows[32m$[0m[90m#Createaprojectauthrequired,rowsc[32m$[0m[90m#Createaprojectauthrequired,rowsco[32m$[0m[90m#Createaprojectauthrequired,rowscop[32m$[0m[90m#Createaprojectauthrequired,rowscope[32m$[0m[90m#Createaprojectauthrequired,rowscopedt[32m$[0m[90m#Createaprojectauthrequired,rowscopedtot[32m$[0m[90m#Createaprojectauthrequired,rowscopedtoth[32m$[0m[90m#Createaprojectauthrequired,rowscopedtothi[32m$[0m[90m#Createaprojectauthrequired,rowscopedtothisu[32m$[0m[90m#Createaprojectauthrequired,rowscopedtothisus[32m$[0m[90m#Createaprojectauthrequired,rowscopedtothisuse[32m$[0m[90m#Createaprojectauthrequired,rowscopedtothisuser[32m$[0m[90m#Createaprojectauthrequired,rowscopedtothisuser[[32m$[0m[90m#Createaprojectauthrequired,rowscopedtothisuser[0[32m$[0m[36mcurl-bcookies.txt-[32m$[0m[36mcurl-bcookies.txt-XP[32m$[0m[36mcurl-bcookies.txt-XPO[32m$[0m[36mcurl-bcookies.txt-XPOS[32m$[0m[36mcurl-bcookies.txt-XPOSTl[32m$[0m[36mcurl-bcookies.txt-XPOSTlo[32m$[0m[36mcurl-bcookies.txt-XPOSTloc[32m$[0m[36mcurl-bcookies.txt-XPOSTloca[32m$[0m[36mcurl-bcookies.txt-XPOSTlocal[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalh[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalho[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhos[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:50[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:500[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/a[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/ap[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/p[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/pr[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/pro[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/proj[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/proje[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projec[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/project[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"n[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"na[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"nam[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name"[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"M[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myf[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfi[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfir[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirs[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstp[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstpr[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstpro[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstproj[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstproje[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstprojec[32m$[0m[36mcurl-bcookies.txt-XPOSTlocalhost:5000/api/projects/-d'{"name":"Myfirstproject}}'}'[}'[0[32m$[0m[90m#L[32m$[0m[90m#Li[32m$[0m[90m#Lis[32m$[0m[90m#Listr[32m$[0m[90m#Listre[32m$[0m[90m#Listret[32m$[0m[90m#Listretu[32m$[0m[90m#Listretur[32m$[0m[90m#Listreturn[32m$[0m[90m#Listreturnso[32m$[0m[90m#Listreturnson[32m$[0m[90m#Listreturnsonl[32m$[0m[90m#Listreturnsonlyy[32m$[0m[90m#Listreturnsonlyyo[32m$[0m[90m#Listreturnsonlyyou[32m$[0m[90m#Listreturnsonlyyourr[32m$[0m[90m#Listreturnsonlyyourro[32m$[0m[90m#Listreturnsonlyyourrow[32m$[0m[90m#Listreturnsonlyyourrows[32m$[0m[90m#Listreturnsonlyyourrows[[32m$[0m[90m#Listreturnsonlyyourrows[0[32m$[0m[36mcurl-bcookies.txtl[32m$[0m[36mcurl-bcookies.txtlo[32m$[0m[36mcurl-bcookies.txtloc[32m$[0m[36mcurl-bcookies.txtloca[32m$[0m[36mcurl-bcookies.txtlocal[32m$[0m[36mcurl-bcookies.txtlocalh[32m$[0m[36mcurl-bcookies.txtlocalho[32m$[0m[36mcurl-bcookies.txtlocalhos[32m$[0m[36mcurl-bcookies.txtlocalhost[32m$[0m[36mcurl-bcookies.txtlocalhost:[32m$[0m[36mcurl-bcookies.txtlocalhost:5[32m$[0m[36mcurl-bcookies.txtlocalhost:50[32m$[0m[36mcurl-bcookies.txtlocalhost:500[32m$[0m[36mcurl-bcookies.txtlocalhost:5000[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/a[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/ap[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/api[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/api/[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/api/p[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/api/pr[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/api/pro[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/api/proj[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/api/proje[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/api/projec[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/api/project[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/api/projects[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/api/projects/[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/api/projects/[[32m$[0m[36mcurl-bcookies.txtlocalhost:5000/api/projects/[0[32m$[0m[90m#W[32m$[0m[90m#Wi[32m$[0m[90m#Wit[32m$[0m[90m#With[32m$[0m[90m#Witho[32m$[0m[90m#Withou[32m$[0m[90m#Withoutt[32m$[0m[90m#Withoutth[32m$[0m[90m#Withoutthec[32m$[0m[90m#Withouttheco[32m$[0m[90m#Withoutthecoo[32m$[0m[90m#Withoutthecook[32m$[0m[90m#Withoutthecooki[32m$[0m[90m#Withoutthecookie[32m$[0m[90m#Withoutthecookie,t[32m$[0m[90m#Withoutthecookie,th[32m$[0m[90m#Withoutthecookie,theA[32m$[0m[90m#Withoutthecookie,theAP[32m$[0m[90m#Withoutthecookie,theAPIr[32m$[0m[90m#Withoutthecookie,theAPIre[32m$[0m[90m#Withoutthecookie,theAPIref[32m$[0m[90m#Withoutthecookie,theAPIrefu[32m$[0m[90m#Withoutthecookie,theAPIrefus[32m$[0m[90m#Withoutthecookie,theAPIrefuse[32m$[0m[90m#Withoutthecookie,theAPIrefuses[32m$[0m[90m#Withoutthecookie,theAPIrefuses[[32m$[0m[90m#Withoutthecookie,theAPIrefuses[0[32m$[0m[36mcurllocalhost:5000/api/p[32m$[0m[36mcurllocalhost:5000/api/pr[32m$[0m[36mcurllocalhost:5000/api/pro[32m$[0m[36mcurllocalhost:5000/api/proj[32m$[0m[36mcurllocalhost:5000/api/proje[32m$[0m[36mcurllocalhost:5000/api/projec[32m$[0m[36mcurllocalhost:5000/api/project[32m$[0m[36mcurllocalhost:5000/api/projects[32m$[0m[36mcurllocalhost:5000/api/projects/[32m$[0m[36mcurllocalhost:5000/api/projects/[[32m$[0m[36mcurllocalhost:5000/api/projects/[0[33m{"msg":"Missingcookie\"access_token_cookie\""}[0m \ No newline at end of file