Conversation
…gine Audited the workflow configuration guide against the execution engine and corrected the places where it described behaviour the platform does not have, or omitted behaviour it does. Conditional transitions were the largest gap. Expressions are evaluated only against the parsed output of the state that declares them — the context store is not in scope — and every evaluation failure is swallowed into a false result that routes to `otherwise`, so a misspelled variable produces a successful run that branches the wrong way. Neither fact was documented. The syntax list also described the evaluator as Python's eval(), listed a string method that does not exist, and omitted the restrictions the AST evaluator actually enforces. Also documented: the four map-reduce and state fields missing from both doc sets (finish_iteration, override_task, include_in_iterator_context, result_as_human_message), the two modes of output_schema and the guarantee each gives, the accepted custom_node_id values and the two different meanings the key carries at node and state level, the editor layout keys that external tooling must preserve, and default_output on the Transform Node. Corrected the assistant property named `skills`, which is `skill_ids`, and an example claiming a failed schema validation triggers an automatic re-prompt. Rewrote the AI generation FAQ, which described an "AutoYaml Assistant" and UI controls that were never built, against the Generate and Refine features that shipped — including the limitation that both emit assistant states only. Generated with AI Co-Authored-By: codemie-ai <[email protected]>
PR Preview Ready!Your preview documentation is ready! Visit it here: Preview URL: http://codemie-docs-pr-previews.s3-website.eu-central-1.amazonaws.com/pr-428/
This preview will be automatically updated when you push new commits to this PR. |
…the engine
Both were introduced by the previous commit on this branch and verified wrong
by running the engine, not by re-reading it.
Dotted access into a nested value does not work. The syntax list offered
`payload.status` as supported attribute access; the AST evaluator rejects it
as an unsafe construct, which — like every other evaluation failure — yields
False and silently routes to `otherwise`. Running the evaluator confirms
`payload.status == "ok"` returns False while `payload["status"] == "ok"`
returns True, and the log records `Condition expression blocked - unsafe
construct`. Replaced with subscript access and added a warning, since a
reader following the old line would have written a condition that always
takes the wrong branch. Indexing, len(), membership and string methods were
re-checked against the evaluator and do work as documented.
The finish_iteration example did not validate. It placed `iter_key` in the
same `next` block as a `condition`, which the execution-config schema
rejects outright ("'iter_key' and 'condition' cannot be set at the same
time"). Restructured so `iter_key` sits on the producer state that emits the
collection and the branching state only routes, and confirmed the corrected
shape passes validate_workflow_execution_config_yaml.
Also removed dotted access from the scope-warning example and the FAQ, where
it muddled the lesson about scope with a second, unrelated failure, and added
dotted access to the FAQ's list of causes for an always-otherwise branch.
Generated with AI
Co-Authored-By: codemie-ai <[email protected]>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The workflow configuration guide was audited line by line against the execution engine, using a production workflow (MR Compliance Review, 25 states) as ground truth. This PR corrects the places where the guide described behaviour the platform does not have, and documents behaviour it does have but never described.
The largest gap was conditional transitions. A
conditionorswitchexpression is evaluated only against the parsed output of the state that declares it — the context store is not in scope. When a referenced name is undefined the expression does not fail loudly: it evaluates tofalse, theotherwisebranch is taken, and the execution reports success. A misspelled variable therefore produces a workflow that runs green and routes the wrong way every time. Neither the scope rule nor the swallowed-failure behaviour was documented.Changes
otherwise" table covering undefined names, typos, missing methods, type mismatches and rejected constructs, with the log lines to grep for. Corrected the syntax reference: the evaluator is an AST allowlist, not Python'seval();.contains()is not a string method; comprehensions and lambdas are rejected. Added the PythonTrue/Falseliteral rule.finish_iteration,override_taskandinclude_in_iterator_context, none of which appeared anywhere in the docs. The last is the only escape hatch when copying the whole context store into N parallel branches overruns the execution checkpoint size limit.output_schema— documented that it accepts two different things with two very different guarantees: a real JSON Schema switches the assistant into enforced structured output, while an example shape is prompt guidance only. Addedresult_as_human_message. Corrected an example claiming failed validation triggers an automatic re-prompt.custom_node_idvalues, and added a warning that the key means the node type insidecustom_nodesbut a reference tocustom_nodes[].idinside a state. Addeddefault_outputto the Transform Node parameter table.meta_statesandnext.meta_next_state_id, and the rule that external tooling (API, SDK, CLI, IaC) must carry them through unchanged.otherwisesymptom.skills; the field isskill_ids, as the YAML example on the same page already showed.Testing
npm startVerified by serving the production build and fetching each changed page (all HTTP 200), confirming the new sections are present in the rendered HTML, and confirming the three new cross-page anchors resolve to real heading ids:
#84-transform-node,#iteration-properties,#two-modes-of-output_schema.Quality Checks
npm run checkpasses (typecheck + lint + commitlint)<text>must be`<text>`)static/img/)npm run buildalso passes, which is what validates the internal links. Gitleaks ran clean via the pre-commit hook.Additional Notes
No new pages or images, so no
sidebars.tschanges were needed. Workflows are not part of the Enterprise package — confirmed by the absence of<EnterpriseFeature />anywhere in the section and by the Enterprise features catalog — so no Enterprise markers were added.Written to the
tech-writerskill standards, including impersonal voice throughoutdocs/. The twofaq/files keep the second person, matching the existing FAQ corpus.Two related defects are deliberately left undocumented, because documenting them would describe controls that do nothing. Both are accepted by config and silently ignored by the engine:
input_source: combinedon the Transform Node — the constant is defined but_extract_source_datahas no branch for it, so it yields an empty source.max_iteration_key_output_limit— declared on the config model, defaulted to 200, read from YAML in three code paths, consumed nowhere.Each should be either wired up or removed; they are tracked separately and are out of scope here.