Skip to content

feat(skills): add demo-flywheel presenter skill + verification harness - #970

Open
Manuel-Jentic wants to merge 1 commit into
mainfrom
demo-flywheel-skill
Open

Manuel-Jentic wants to merge 1 commit into
mainfrom
demo-flywheel-skill

Conversation

@Manuel-Jentic

Copy link
Copy Markdown
Collaborator

Summary

Adds a presenter tool for demoing the three spec-flywheel flows end-to-end against a local stack, plus a self-verifying harness that proves each flow's real effects landed. It orchestrates the existing skills (import-new-api, contribute-spec-fix) — it doesn't replace them.

Kept un-served (like init-design): it's a presenter tool, not an agent capability, so there's no SERVED_SKILLS entry, no cli//src/ mirrors, and no drift-test obligation (drift test stays green).

The demo (one API's lifecycle, in 2 → 1 → 3 order)

flowchart LR
  F2["Flow 2\nimport a NEW API"] --> F1["Flow 1\nimprove it via an overlay\n(confirm makes it live)"] --> F3["Flow 3\nreact to an upstream change\n+ rollback (teardown)"]
Loading

Flow 1 needs an already-catalogued API, so running Flow 2 first (which creates one) makes the whole demo a single coherent subject: import → improve → live → react/rollback.

What's here

  • skills/demo-flywheel/SKILL.md — the narrated walkthrough with an explicit 4-gate human-in-the-loop protocol (agent approval, overlay :confirm, any public gh action, rollback), auto-proceeding on everything local/reversible.
  • scripts/flywheel_verify.py — an httpx PASS/FAIL harness (--flow 2|1|3|all). Bootstraps its own org-admin, promotes imported drafts, polls the overlay for confirmed_revision_id, and exits non-zero on any failure (so it doubles as a smoke test). Flow 3 self-skips if the fixture isn't up.
  • config/local-sqlite-demo.yaml — a non-destructive full-copy config that adds only what Flow 3 needs: the fixture manifest_url, update_check_interval_seconds: 1 (never 0, which is the kill switch), and 127.0.0.0/8 egress so the loopback fixture is probeable.

Safety / blast-radius

A real `[AUTO]` issue on `jentic/jentic-public-apis` triggers a live LLM-backed workflow that spends the repo's Bedrock secret and opens a non-draftable PR to `main`. So the demo defaults to a `--no-github` dry-run or a presenter-owned fork, makes the Flow-1 human PR a draft with a `[DEMO — do not merge]` title, uses a fresh `RUN_ID` per run (to dodge the existence-gate STOP and the duplicate-version hard-fail), and ends with a mandatory teardown (rollback + close/delete PR/issue/branch). The harness itself never touches GitHub.

Test plan

Verified end-to-end against `make start-app-sqlite` (with the demo config) + the Flow-3 fixture:

  • `python scripts/flywheel_verify.py --flow all` → 21/21 PASS (import + promote + listable/live; overlay submit → confirm → served-spec fix → rollback reverts → deprecated; fixture bump → refresh → `update_available` flips → re-import clears).
  • Flow-3 skip path exits 0 when the fixture is down.
  • `ruff` + `ruff format` + `mypy` clean on the harness.
  • `tools/skills_sync.py --check` and `tests/arch/test_skill_drift.py` green (un-served skill imposes no obligation).

Reviewer note: please use squash + merge.

Made with Cursor

An agent-commanded, human-in-the-loop demo of the three spec-flywheel flows
(import a new API -> improve it via an overlay -> react to an upstream change)
against a local stack, plus a self-verifying harness that proves each flow's
real effects landed. Kept un-served (like init-design) — a presenter tool, not
an agent capability, so no SERVED_SKILLS entry and no mirrors.

- skills/demo-flywheel/SKILL.md: narrated 2->1->3 walkthrough with a 4-gate
  human-in-the-loop protocol, GitHub safety defaults (--no-github/fork, draft
  PR, RUN_ID-fresh identifiers), corrected overlay/confirm mechanics, teardown
- scripts/flywheel_verify.py: httpx PASS/FAIL harness (--flow 2|1|3|all),
  bootstraps org-admin, promotes imported drafts, polls overlay confirm, and
  exits non-zero on failure; Flow 3 self-skips if the fixture is down
- config/local-sqlite-demo.yaml: non-destructive Flow-3 config (fixture
  manifest_url, update_check_interval_seconds=1, 127.0.0.0/8 egress)

Co-authored-by: Cursor <cursoragent@cursor.com>
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.

1 participant