Skip to content

Claude/convoy readme installer#12

Merged
teckedd-code2save merged 4 commits into
mainfrom
claude/convoy-readme-installer
Jun 10, 2026
Merged

Claude/convoy readme installer#12
teckedd-code2save merged 4 commits into
mainfrom
claude/convoy-readme-installer

Conversation

@teckedd-code2save

Copy link
Copy Markdown
Owner

No description provided.

claude added 4 commits June 10, 2026 20:47
…plugin

Author stage — less rigid:
- fallbackDockerfile now uses every relevant scan signal: scan.port
  (no more hardcoded 8080), scan.packageManager (npm ci vs pnpm
  frozen-lockfile vs yarn frozen-lockfile vs bun), scan.buildCommand,
  scan.startCommand, scan.dataLayer (adds prisma generate when Prisma
  is detected), scan.framework (Next.js gets a proper 3-stage standalone
  Dockerfile instead of the generic node template).
- Node base image bumped node:20 → node:22 (Node 20 EOL Oct 2026).
- Python path picks the right installer for poetry/uv/pip and uses the
  detected framework for the start command (uvicorn/gunicorn/python).
- Each non-node template now uses scan.port.
- All of this degrades gracefully when signals are absent — the enricher
  still overwrites with a fully tailored Dockerfile when a key is set,
  but the deterministic fallback is now production-quality for common
  stacks without enrichment.

Plugin commands — platformization story:
- ship.md now leads with a platform-selection table and explains WHY
  Convoy picks a platform (evidence-based scoring, not guessing). Added
  an explicit b2dp/ship-to-vps handoff paragraph — agents and operators
  coming from those skills now know exactly what to do next.
- where.md PLATFORM READINESS section added: checks flyctl, vercel,
  railway, gcloud, and ssh auth at orientation time so the operator
  knows which platforms are ready to receive a deploy before they plan.

docs/integration.md (new):
  Documents the full b2dp → ship-to-vps → Convoy chain, the platform
  scoring table, how to register a post-ship-to-vps repo with Convoy,
  and the current skill-update status (patches in docs/skill-updates/
  need to be applied to teckedd-code2save/ai-build-tools to fix Prisma 7
  and Caddy breakages in those external skills).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
closes #4, closes #8

## demo-app: Meridian concurrency scenario (issue #4)

Adds `src/routes/render.ts` — a POST /render route that simulates a
PDF renderer with a global serialisation lock. In DEMO_MODE=concurrent
each request acquires `renderLock` before processing, serialising all
renders through a single queue. With 30 concurrent requests and a
300ms render time, the last request waits 9 seconds — p99 blows past
any threshold while error rate stays at 0%.

The bug is intentionally legible: a module-level `let renderLock`
promise chain with a clear TODO comment. The medic can find it by
reading render.ts and identify the lock as the root cause.

Also adds --inject-failure=concurrency to the Convoy CLI, which uses
scripted fixture logs (render_lock_acquired entries with linearly
stacking waited_ms) to trigger the medic without needing a real
rehearsal run. Useful for demos without full service setup.

## monorepo: service-relative file paths (issue #8)

The author stage was writing all files to the repo root regardless of
which lane they belonged to. In a monorepo with apps/api and apps/web,
both lanes would author a `Dockerfile` at the root — the second one
silently overwrote the first via deduplication.

Fix: draftAuthorSection now accepts a servicePath parameter (default
'.') and applies it as a prefix to all authored file paths. A lane at
`apps/api` produces `apps/api/Dockerfile`, `apps/api/fly.toml`, etc.
The manifest path is also prefixed to `apps/api/.convoy/manifest.yaml`.

The buildLane caller in planner/index.ts now passes node.path through.
Cross-lane deduplication still runs but will no longer encounter path
collisions since each lane's files have unique service-scoped paths.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…e_pr

closes #5, closes #6

## Platform scoring evidence (issue #5)

PlanPlatformCandidate gains an `adjustments: [{delta, label}]` field.
picker.ts now records each individual score delta with a human-readable
label via an `adj(delta, label)` helper instead of accumulating reasons
as a flat string. The top 3 adjustments by |delta| are the signal.

CLI plan output (`renderPlan`) replaces the flat score ranking with a
table showing each candidate's score and its top two adjustments:

  Platform selection
    fly  chosen (scored, score 90)
    ● fly         90  +25 background worker topology, +15 container-native
    · railway     70  +20 managed Postgres in one click
    · vercel      25  -25 background workers not supported

Web plan detail page renders the same adjustments inline in the
candidate grid cards: coloured deltas (+N green / −N red) with the
adjustment label, replacing the flat reason string. No data-fetching
change — adjustments come from the plan JSON already in the page.

## Rehearsal evidence on merge_pr card (issue #6)

The `merge_pr` approval was missing the `rehearsal` summary that
`open_pr` already carries. Added `rehearsal: summarizeRehearsalForApproval(ctx.prior['rehearse'])`
to the merge_pr awaitApproval call in AuthorStage.#runReal.

MergePrApprovalCard in the web UI now reads `summary['rehearsal']` and
renders `<RehearsalEvidence>` (already existed for open_pr) showing
healthy/breached status, p99, error rate, duration, and smoke test
count. In scripted mode the rehearsal field is absent and no fallback
warning is shown (scripted runs have no real rehearsal data).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…n story

Issues #9, #10, #11 from the sprint.

#9 — plan detail page as handoff document
- LaneSection now shows per-lane scan risks (block/warn/info with colour
  badges) and required secrets checklist (staged ✓ / already-set / missing
  with amber pulse). Secrets hint links to `convoy stage-secrets` for
  missing keys.
- web/lib/plans.ts: add `adjustments` to PlanPlatformCandidate (removes
  the unsafe cast the plan page was doing), add `risks`/`healthPath`/`port`
  to the lane.scan type so the new fields are type-safe.

#10 — demo script (docs/demo-script.md)
- 3-min pitch narrative (spoken, no demo) explaining the core problem
- 10-minute live walkthrough: Act 1 Plan → Act 2 Concurrency breach
  (--inject-failure=concurrency) → Act 3 Clean run → Act 4 Secrets gate
  → Act 5 The handoff
- Objection-handling section for CI/CD, Terraform, trust, and platform
  choice questions

#11 — README Meridian story
- New "The Meridian scenario" section before "See it in action"
- Tells the complete story: 3-service fintech, principal engineer leaving,
  concurrency bug caught in rehearsal, medic diagnosis, fix-and-resume,
  secrets gate, canary, 8-min total with zero tribal knowledge required
- Replaces "here's what the product does" list with a concrete narrative

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@teckedd-code2save teckedd-code2save merged commit b1de05a into main Jun 10, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants