Generated: 2026-05-24
Added a complete, deterministic, local proof loop for the Open Workflow Library intelligence pipeline:
prompt
-> Universal Workflow IR
-> n8n workflow.json
-> static n8n compatibility validation
-> repair proposal (if needed)
-> learning event (if useful)
-> human-reviewable queue
-> proof README
The loop is static-validation only. No workflow was imported into n8n, no node was executed, no external service was called, no LLM was used. Nothing is committed, pushed, or branched.
| Tool | Role |
|---|---|
tools/export_ir_to_n8n.py |
IR JSON → n8n workflow JSON (conservative whitelist, placeholders only) |
tools/validate_n8n_workflow.py |
Static n8n compatibility validator |
tools/prompt_to_n8n.py |
Orchestrator (prompt → IR → n8n → validation → proof README) |
tools/propose_runtime_repair.py |
Emits repair proposals from validation output |
tools/create_learning_event.py |
Captures learning events from validation/repair |
tools/build_review_queue.py |
Aggregates everything needing human review |
| # | Prompt (paraphrased) | Validation | Errors | Warnings | Nodes | Repair | Learn |
|---|---|---|---|---|---|---|---|
| 1 | website leads → score → CRM → Slack alert | PASS | 0 | 0 | 6 | 0 | 0 |
| 2 | check support tickets every morning, summarize, digest | PASS | 0 | 1 | 4 | 1 | 1 |
| 3 | homecare admin intake → check docs → task → escalate | PASS | 0 | 0 | 4 | 0 | 0 |
| 4 | monitor failed payments → finance tracker → notify CS | PASS | 0 | 0 | 3 | 0 | 0 |
| 5 | content brief → draft task → assign → status update | PASS | 0 | 0 | 4 | 0 | 0 |
All five proof outputs live under reports/runtime-proof/<slug>/ with
the full artefact set (prompt.txt, workflow.ir.json,
workflow.n8n.json, validation.json, validation.md,
repair-proposals.json, repair-proposals.md, learning-events.json,
learning-events.md, README.md).
Each demo case wrote a draft workflow.ir.json with
generationStatus: planned and validationStatus: needs-review. The IR
files satisfy schemas/workflow-ir.schema.json required-field checks.
Each demo case produced a workflow.n8n.json carrying:
- top-level
name,nodes,connections,settings,active: false,tags - a deterministic
idandversionId(uuid5) - a sticky-note safety disclaimer ("Static validation only — not behaviourally tested. All URLs and credentials are placeholders.")
- only nodes from the conservative whitelist (manualTrigger, webhook, scheduleTrigger, set, if, httpRequest, code, noOp, respondToWebhook, stickyNote)
- placeholder URLs on
api.example.invalidand placeholder body parameters only
All 5 demo workflows: PASS (0 errors).
Warnings observed: 1 total, on the "checks support tickets every
morning, summarises urgent tickets" case — because that workflow
contains a code (summarise) node, which the validator deliberately
flags for review.
- Total runtime repair proposals across the 5 demos: 1.
- It was produced from the one warning case, classified as
n8n-code-node-review, severitymedium, withrequiresHumanReview: trueandstatus: "proposed".
The pre-existing catalog-wide repair proposals (reports/repair-proposals.json)
remain at the V1 cap of 500 (233 high, 267 medium).
- Total runtime learning events: 1.
failureType: review-required, proposed rulen8n-code-node-review-required(wiki-failure-case), confidence 0.60,humanReviewStatus: pending,appliedToWiki: false.
reports/review-queue.json aggregates:
| Type | Count |
|---|---|
high-risk-workflow |
100 |
repair-proposal |
50 |
prompt-to-n8n-proof |
5 |
runtime-repair-proposal |
1 |
learning-event |
1 |
generated-pack-needs-behavioural-test |
1 |
| Total | 158 |
Severity: high=150, medium=3, low=5. Every item is status: pending,
humanReviewRequired: true.
Created
tools/export_ir_to_n8n.pytools/validate_n8n_workflow.pytools/prompt_to_n8n.pytools/propose_runtime_repair.pytools/create_learning_event.pytools/build_review_queue.pydocs/runtime-proof.mdwiki/generated/runtime-proof-findings.mdreports/runtime-proof-v1.{json,md}reports/review-queue.{json,md}reports/runtime-proof/<slug>/...(5 slugs × 10 files = 50 artefacts)
Modified (additive)
.github/workflows/audit.yml— added prompt-to-n8n smoke, per-runtime-proof validation, and review-queue build steps.README.md— added a "Workflow Runtime Proof V1" section with the command set and honest limitations.
Refreshed by existing tools (existing behaviour)
catalog/workflows.index.jsoncatalog/unified-workflows.index.jsonreports/workflow-audit.{json,md}reports/unified-catalog-report.{json,md}reports/schema-validation.{json,md}reports/duplicates-report.{json,md}reports/repair-proposals.{json,md}wiki/generated/{README,category-summary,integration-summary,prompt-patterns,risk-review-queue,trigger-patterns}.md
No existing workflow file was deleted or overwritten.
python tools/audit_workflows.py
python tools/validate_generated_pack.py
python tools/build_unified_catalog.py
python tools/validate_schemas.py
python tools/analyze_duplicates.py
python tools/propose_repairs.py
python tools/build_wiki_seed.py
python tools/prompt_to_n8n.py "Create a workflow that receives website leads, scores them, saves qualified leads to CRM, and alerts Slack."
python tools/prompt_to_n8n.py "Create a workflow that checks support tickets every morning, summarizes urgent tickets, and sends a manager digest."
python tools/prompt_to_n8n.py "Create a workflow for homecare admin intake that receives a referral, checks required documents, sends an internal task, and escalates missing information to a human."
python tools/prompt_to_n8n.py "Create a workflow that monitors failed payments, updates a finance tracker, and notifies the customer success team."
python tools/prompt_to_n8n.py "Create a workflow that receives a content brief, creates a draft task, assigns it to a reviewer, and sends a status update."
python tools/propose_runtime_repair.py --all
python tools/create_learning_event.py --all
python tools/build_review_queue.py
# plus: python tools/validate_n8n_workflow.py reports/runtime-proof/<slug>/workflow.n8n.json (for each slug)All commands exited 0.
- Prompt → IR → n8n export produces structurally valid n8n workflow JSON on five distinct prompts spanning sales, support, regulated-admin, finance, and content domains.
- The static n8n validator catches the property classes it claims to cover (missing trigger, duplicate names/IDs, broken connection targets, embedded credentials, secret patterns, unsafe HTTP hosts, missing respond/setup notes).
- Validator findings flow into repair proposals matching
schemas/repair-proposal.schema.jsonwithrequiresHumanReview: trueandstatus: "proposed". - Validator findings flow into learning events matching
schemas/learning-event.schema.jsonwithhumanReviewStatus: "pending"andappliedToWiki: false. - All items needing human review aggregate into
reports/review-queue.jsonand.md, grouped by type and severity.
- The workflows have not been imported into n8n.
- No node has been executed.
- No external API has been called.
- The prompt-to-IR layer remains keyword-rule. It misses plurals, synonyms, and context shifts. Three of the five demo prompts (those whose verbs are plural — "scores", "saves", "monitors", "summarizes", "creates") generated default action steps rather than richer IR shapes.
- Multi-framework export is not implemented in V1. Only n8n.
- Self-improvement is not autonomous. Learning events are evidence only.
- Plural / synonym handling in
tools/prompt_to_ir.pyis a known limitation. Out of scope for V1. - The static validator does not parse n8n's internal parameter schemas. A workflow can pass and still fail to import into n8n.
- The review queue caps high-risk surfacing at 100 and duplicate clusters at 50; the full backlog is larger.
jsonschemais not installed in the local environment;validate_schemas.pyran in lightweight mode (existing limitation; documented).
Behavioural validation pass: import one runtime-proof workflow into a
sandbox n8n instance, replace the placeholders with realistic values,
run the trigger, and record success/failure as a new learning event
with source: "generation" or source: "ci". Use that result to
decide which proposed rule(s) in wiki/generated/runtime-proof-findings.md
to promote into wiki/repair-rules/ via a curated, human-reviewed PR.
READY FOR HUMAN DIFF REVIEW.
Not committed. Not pushed. No branch created. No git init run.