corezoid-process-tech-writer

Documents a Corezoid process — produces a human-readable Markdown file AND enriches the process JSON with descriptions on every node and parameter. Output is designed for team wikis, internal portals, and potential future product integration. Activate whenever a user asks to document a process, write docs for a connector, add descriptions to a process, create documentation for a logic, describe what a process does, or any similar phrasing. Also activate when the user shares a process JSON and asks to explain it or make it self-documenting. Always produce BOTH outputs (Markdown file + enriched JSON) — never just one.

Corezoid Process Tech Writer

Always produce two outputs for every process:

  1. Markdown documentation file at .processes/<name>-docs.md
  2. Enriched process JSON (same file, description fields filled in) at .processes/<name>-enriched.json

How to extract information from the process JSON

Inputs

Read the params array. Each entry has:

  • name — parameter name
  • type — data type
  • descr — description (may be empty — infer from context)
  • flags"required" flag means mandatory; "input" = input param, "output" = output param
  • regex — validation pattern (document if non-empty)

Outputs

Find all nodes with api_rpc_reply logic in condition.logics:

  • throw_exception: false → success response — document res_data keys and types
  • throw_exception: true → error response — document what triggers it (node title, exception_reason if present)

Process flow

Walk scheme.nodes following go entries from the Start node (obj_type: 1):

  • Start → node with id matching the to_node_id in Start's go logic
  • Continue following go entries to map the happy path
  • Note branches at Condition nodes or go_if_const entries
  • Note error paths via err_node_id references

External dependencies

  • API Call nodes (api logic): extract url, method, extra_headers
  • {{env_var[@name]}} references: list all unique variable names used
  • Code nodes: look for referenced services or data transformations

Output 1: Markdown documentation

Save to .processes/<process-name-in-snake-case>-docs.md.

Use this exact structure:

# <Process Title>

## Overview
<1-2 sentences: what this process does and when to call it. Be specific about the business purpose.>

## Input Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| field_name | string | Yes | Description from params.descr |
| optional_field | number | No | Description |

<If any field has regex validation, add a "Validation" subsection listing the rules.>

## Output

### Success response
| Field | Type | Description |
|-------|------|-------------|
| response | object | The API response body |

### Error cases
| Error | Trigger condition |
|-------|------------------|
| "Code node error" | JavaScript execution failed in the preparation step |
| "API call error" | External API returned an error or was unreachable |

## How to Call

Example `task_data` with realistic values:
`​`​`json
{
  "field_name": "example_value",
  "optional_field": 42
}
`​`​`

## Process Flow

1. **Start** — Entry point, receives the task
2. **<Code Node title>** — <plain English: what this step does, e.g. "Builds the request body from input parameters">
3. **<API Call / Call Process title>** — <plain English: what is called and why>
4. **<Reply node title>** — <what is returned on success>
5. **Final** — Task stored, process complete

<For error paths, describe them after the happy path:>

**Error path (Code Node failure):** If the preparation step fails, an error reply is returned with the exception description, and the task ends at the Error node.

**Error path (API failure):** If the external API returns an error or is unreachable, ...

## External Dependencies

| Dependency | Type | Variable / URL |
|-----------|------|----------------|
| <service name> | HTTP API | `{{env_var[@variable-name]}}` |

## Notes

- <Any timeouts configured via semaphors — e.g. "API call has a 30-second timeout with automatic retry">
- <Rate limiting (max_threads setting)>
- <Node naming deviations from Action_Object_Context convention — note as suggestions, not errors>
- <Any other relevant technical notes>

Output 2: Enriched process JSON

Read the original process JSON, add description fields to every node, and write the result to .processes/<name>-enriched.json.

Rules for node enrichment

What to fill:

  • description field on every node — one plain English sentence: what this node does in the context of this process
  • params[].descr — if empty, infer from the field name and process context

What NOT to change:

  • id, obj_type, condition, logics, semaphors — never touch these
  • x, y, extra, options — leave as-is
  • title — only fill if the field is completely empty (empty string "")

Description style:

  • One sentence, active voice, present tense
  • Specific to this process — not generic ("Handles errors" is bad; "Returns an error reply if the actor creation API call fails" is good)
  • Reference actual data fields and external services where relevant

Examples:

Node typeBad descriptionGood description
Code node"Prepares data""Builds the request body with actor_name, form_id, and authorization_header for the Simulator API call"
API Call"Makes API call""Sends POST request to Simulator API to create a new actor with the prepared parameters"
Reply Success"Returns response""Returns the created actor data from the Simulator API back to the calling process"
Reply Error"Returns error""Returns error reply with throw_exception:true when the actor creation API call fails"
Final"Final""Stores the completed task with actor creation result and marks the process as successful"

Both files must be produced in the same response

Do not produce one without the other. If the process JSON is very large, produce the Markdown first, then the enriched JSON.