@cyber-dash-tech/revela 0.17.23 → 0.18.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/README.md +24 -25
  2. package/README.zh-CN.md +25 -26
  3. package/bin/revela.ts +2 -4
  4. package/lib/commands/help.ts +13 -13
  5. package/lib/commands/init.ts +24 -0
  6. package/lib/commands/png.ts +29 -0
  7. package/lib/commands/refine.ts +1 -1
  8. package/lib/commands/research.ts +24 -0
  9. package/lib/commands/review.ts +92 -14
  10. package/lib/decks-state.ts +7 -7
  11. package/lib/design/designs.ts +44 -0
  12. package/lib/narrative-state/deck-plan-artifact.ts +849 -19
  13. package/lib/narrative-state/render-plan.ts +13 -14
  14. package/lib/pdf/export.ts +84 -24
  15. package/lib/refine/server.ts +4 -3
  16. package/lib/runtime/index.ts +52 -7
  17. package/lib/runtime/review.ts +4 -104
  18. package/lib/workspace-state/render-targets.ts +2 -2
  19. package/lib/workspace-state/rendered-artifacts.ts +1 -1
  20. package/lib/workspace-state/types.ts +1 -1
  21. package/package.json +1 -1
  22. package/plugin.ts +31 -42
  23. package/plugins/revela/.codex-plugin/plugin.json +2 -2
  24. package/plugins/revela/.mcp.json +1 -1
  25. package/plugins/revela/mcp/revela-server.ts +118 -58
  26. package/plugins/revela/skills/revela-design/SKILL.md +9 -1
  27. package/plugins/revela/skills/revela-domain/SKILL.md +1 -1
  28. package/plugins/revela/skills/revela-export/SKILL.md +4 -5
  29. package/plugins/revela/skills/revela-init/SKILL.md +19 -34
  30. package/plugins/revela/skills/revela-make-deck/SKILL.md +15 -34
  31. package/plugins/revela/skills/revela-research/SKILL.md +17 -26
  32. package/plugins/revela/skills/revela-review-deck/SKILL.md +11 -29
  33. package/skill/SKILL.md +22 -19
  34. package/plugins/revela/skills/revela-story/SKILL.md +0 -24
@@ -1,50 +1,31 @@
1
1
  ---
2
2
  name: revela-make-deck
3
- description: Plan and generate Revela deck artifacts in Codex from canonical narrative state and deck-plan files.
3
+ description: Plan and generate Revela deck artifacts in Codex from deck-plan files and source-linked materials.
4
4
  ---
5
5
 
6
6
  # Revela Make Deck
7
7
 
8
- Use this skill when the user asks to make, generate, or update a Revela deck.
8
+ Use this skill when the user asks to plan, make, generate, or update a Revela deck.
9
9
 
10
10
  ## Source Authority
11
11
 
12
- - Canonical meaning comes from `revela-narrative/`.
13
- - Deck execution planning comes from `deck-plan/`.
12
+ - Deck execution planning comes from canonical `deck-plan.md`.
13
+ - Local materials, material reviews, `researches/`, `assets/`, and user intent provide source context.
14
14
  - Generated artifacts live under `decks/*.html`.
15
- - `DECKS.json.slides[]` is not the slide-count contract.
15
+ - Do not require a Narrative Vault before planning or generating a deck.
16
16
 
17
17
  ## Workflow
18
18
 
19
- 1. Call `revela_compile_narrative` and `revela_markdown_qa`.
20
- 2. Report narrative and Markdown diagnostics, but treat only malformed/unsafe files and technical artifact validity as hard blockers.
21
- 3. Call `revela_design_list`, `revela_design_read` using `section: "rules"`, and `revela_design_inventory` before authoring or repairing `deck-plan/`; deck-plan layout/component names must come from the selected design inventory.
22
- 4. Call `revela_read_deck_plan` as the required deck-plan preflight before any HTML generation.
23
- 5. If `deck-plan/` is missing or incomplete, author or repair `deck-plan/index.md` and `deck-plan/slides/*.md` before calling `revela_create_deck_foundation`; use only inventory-listed layouts/components in slide frontmatter and visual intent.
24
- 6. Report deck-plan diagnostics before artifact generation, including stale narrative hashes, missing slide projections, missing evidence trace, caveats, malformed plan files, or layout/component names outside the active design inventory.
25
- 7. Do not start HTML generation from narrative alone unless the user explicitly asks for a throwaway diagnostic smoke deck.
26
- 8. For new HTML files, call `revela_create_deck_foundation`.
27
- 9. Before patching slide HTML, read the specific layouts/components used by the deck plan with `revela_design_read_layout` and `revela_design_read_component`; fetch `section: "chart-rules"` and the `echart-panel` component before creating or changing ECharts. If the user asks to switch designs persistently, call `revela_design_activate`; if they ask for a one-off design, read that design by name, call `revela_design_inventory` with that name, and pass `designName` to `revela_create_deck_foundation`.
28
- 10. Patch slides into the foundation between Revela slide markers. Preserve positive 1-based `data-slide-index` values. Every slide must use `<section class="slide" ...>` with exactly one direct `.slide-canvas` child.
29
- 11. Generate chapter by chapter. Keep the HTML valid after each write.
30
- 12. After every HTML write, call `revela_run_deck_qa` and repair hard errors before review or export.
31
-
32
- ## Generated Visual Assets
33
-
34
- - Codex may use the `imagegen` skill for deck-level visual assets when a slide's visual intent calls for an image or diagram and no suitable workspace/source asset exists.
35
- - Prefer `imagegen` for flow diagrams, framework diagrams, process visuals, system relationship maps, journey maps, before/after schematics, conceptual illustrations, abstract heroes, chapter dividers, background textures, non-evidence metaphor visuals, and visual drafts.
36
- - Do not use generated images for source evidence, factual screenshots, real people, real places, real products, logos, data charts, tables, or visuals that need verifiable factual accuracy.
37
- - If the visual needs exact editable text, precise data, axes, code, tables, or strict structure, build it with HTML/CSS, ECharts, or `data-table` instead of `imagegen`.
38
- - Generated images are artifact-level visuals only. Do not treat them as evidence, source materials, quote support, or factual proof.
39
- - If a generated image is referenced by deck HTML, move or copy the final asset into the workspace, preferably under `assets/<topic>/media/` or the project's existing asset directory. Deck HTML must reference a workspace-relative local path, never Codex's default generated-image path.
40
-
41
- ## QA Repair Loop
42
-
43
- - `revela_run_deck_qa` launches a browser. In sandboxed Codex sessions, this may require user-approved command escalation.
44
- - If QA reports `text_overflow` or `text_clipped`, reduce font size, line length, padding, or line-height before changing narrative meaning.
45
- - Prefer conservative cover and section-title sizing in smoke or diagnostic decks.
46
- - If QA reports that a standalone smoke artifact is not the active legacy deck target, treat it as a non-blocking warning when slide identity and canvas checks pass.
19
+ 1. For planning requests, inspect local materials/reviews/research, then write or repair `deck-plan.md` directly. Do not use structured upsert tools for normal plan authoring.
20
+ 2. Call `revela_design_list`, `revela_design_read` with `section: "rules"`, and `revela_design_inventory` before selecting layouts/components; use the returned layout slots and component nesting hints in `deck-plan.md`.
21
+ 3. Call `revela_read_deck_plan` after writing or repairing `deck-plan.md`. If diagnostics report layout, slot, component, `children`, or `sourceLinks` issues, patch the Markdown directly and call `revela_read_deck_plan` again.
22
+ 4. Call `revela_read_deck_plan` before HTML generation and follow the current projection. `revela_read_deck_plan` is QA/diagnostics, not a writer.
23
+ 5. For new HTML files, call `revela_create_deck_foundation`.
24
+ 6. Before patching slide HTML, read the specific layouts/components with `revela_design_read_layout` and `revela_design_read_component`; fetch chart rules before ECharts.
25
+ 7. Patch slides into the foundation between Revela slide markers. Preserve positive 1-based `data-slide-index` values. Every slide must have exactly one direct `.slide-canvas` child.
26
+ 8. Generate chapter by chapter. Keep the HTML valid after each write.
27
+ 9. After every HTML write, call `revela_run_deck_qa` and repair hard errors before review or export.
47
28
 
48
29
  ## Deck Plan Requirements
49
30
 
50
- Every deck plan should include Cover, Table of Contents, and Closing. Use 3-5 chapter headings, explicit slide ranges, low-fidelity layout sketches, narrative links, visual intent, evidence trace, and caveats.
31
+ Every normal deck plan should include Cover, Table of Contents, and Closing. Use 3-5 chapter headings, explicit slide ranges, `sourceLinks` for materials/findings/assets/URLs/caveats, visual intent, caveats, and unresolved inputs. Use `box.children` when multiple child components support one semantic idea; do not duplicate the same child as both nested and top-level.
@@ -1,38 +1,29 @@
1
1
  ---
2
2
  name: revela-research
3
- description: Research Revela story gaps and bind evidence in Codex while preserving explicit source boundaries.
3
+ description: Research source-linked findings for a Revela deck plan while preserving explicit source boundaries.
4
4
  ---
5
5
 
6
6
  # Revela Research
7
7
 
8
- Use this skill when the user asks to research, close evidence gaps, evaluate saved findings, or bind support to current Revela claims.
8
+ Use this skill when the user asks to research missing deck inputs, gather public support, save findings, or find source-linked examples/assets for a deck.
9
9
 
10
10
  ## Contract
11
11
 
12
- - Saved findings in `researches/**/*.md` are not canonical evidence until specific evidence nodes or bindings preserve source trace, quote/snippet, support scope, unsupported scope, caveat, and strength.
13
- - Missing evidence must stay visible as a gap.
14
- - Do not broaden claims to fit a source.
15
- - Do not write deck artifacts during research.
12
+ - Research output is saved under `researches/**/*.md` for deck-plan use.
13
+ - Do not bind findings into a Narrative Vault or canonical evidence graph.
14
+ - Do not create deck artifacts during research.
15
+ - Do not invent URLs, quotes, page references, numbers, caveats, or licenses.
16
16
 
17
17
  ## Workflow
18
18
 
19
- 1. Call `revela_research_targets` to derive target order, selected target, saved findings diagnostics, and evidence gaps.
20
- 2. For existing saved findings, call `revela_evaluate_research_findings` before deciding whether they can support a claim.
21
- 3. Use external research only when the user allowed or requested it and the gap is publicly researchable.
22
- 4. After external research, call `revela_research_save` with structured Markdown findings and explicit source list.
23
- 5. Bind only when `bindingEval.status === "bindable"` by calling `revela_bind_research_findings`; do not hand-author evidence Markdown for bindable saved findings.
24
- 6. If a finding is incomplete, report missing fields instead of inventing them.
25
- 7. After binding or any narrative edit, call `revela_markdown_qa` and `revela_compile_narrative`.
26
- 8. Report evidence bound, unbound findings, remaining caveats, and the next smallest story action.
27
-
28
- ## Binding Criteria
29
-
30
- Bind only when the supported claim exists and the evidence includes:
31
-
32
- - source URL/path/findings file
33
- - quote or traceable snippet
34
- - support scope
35
- - unsupported scope
36
- - caveat
37
- - strength
38
- - explicit supported claim context
19
+ 1. Inspect material intake status, material review files, existing `researches/**/*.md`, and `deck-plan.md` when present.
20
+ 2. Identify the smallest research tasks needed for the deck objective: market facts, benchmarks, examples, source quotes, images/logos/screenshots, or caveats.
21
+ 3. Use external research only for public facts or user-authorized questions.
22
+ 4. Save useful findings with `revela_research_save`.
23
+ 5. Each finding should include source URL/path, quote/snippet, what it supports, what it does not support, caveat, date checked, and optional image leads.
24
+ 6. If a finding is context only, label it as context and do not present it as proof.
25
+
26
+ ## Report
27
+
28
+ - Start with `Research: completed`.
29
+ - List saved findings paths, source limitations, unresolved inputs, and whether `/revela plan --deck` can proceed.
@@ -1,43 +1,25 @@
1
1
  ---
2
2
  name: revela-review-deck
3
- description: Review Revela deck artifacts in Codex for technical validity, evidence trace, and narrative alignment.
3
+ description: Review Revela deck artifacts in Codex for technical validity and targeted deck edits.
4
4
  ---
5
5
 
6
6
  # Revela Review Deck
7
7
 
8
- Use this skill when the user asks to review, inspect, diagnose, or refine a generated Revela deck.
8
+ Use this skill when the user asks to review, diagnose, QA, or refine a generated Revela deck.
9
9
 
10
10
  ## Workflow
11
11
 
12
12
  1. Resolve the target `decks/*.html` file from the user request or unambiguous workspace state.
13
- 2. For a plain request like `review decks/foo.html`, call `revela_review_deck_open` and let the tool open the browser by default.
14
- 3. Use `revela_review_deck_read`, normally with `format: "markdown"`, only when the user explicitly asks to diagnose, QA, read, check, inspect source alignment, inspect evidence trace, or avoid opening a GUI.
15
- 4. Use the read output as the deterministic diagnostics packet for artifact QA, deck-plan diagnostics, narrative/vault diagnostics, artifact coverage, and evidence trace.
16
- 5. Pass `openBrowser: false` only for tests, no-GUI environments, or when the user explicitly asks for a link instead of opening the page.
17
- 6. Do not call `revela_run_deck_qa`, `revela_compile_narrative`, or `revela_read_deck_plan` separately for a normal Review UI open.
18
- 7. Call `revela_run_deck_qa` separately only for focused low-level artifact QA, after a repair, or when the user explicitly asks for QA detail.
19
- 8. Separate technical blockers from narrative/evidence diagnostics.
20
- 9. Pure visual/layout/export fixes may patch artifacts directly when the user asks for a change, but read active design rules first with `revela_design_read` using `section: "rules"`. Meaning changes must update `revela-narrative/` first.
21
-
22
- ## Generated Visual Assets
23
-
24
- - For Review Comment or Apply Fix requests such as adding an image, replacing a cover visual, creating a concept illustration, making a media block visual, or turning a slide idea into a flow/framework diagram, Codex may use the `imagegen` skill.
25
- - Prefer `imagegen` for flow diagrams, framework diagrams, process visuals, system relationship maps, journey maps, before/after schematics, conceptual illustrations, abstract heroes, chapter dividers, background textures, non-evidence metaphor visuals, and visual drafts.
26
- - Do not use generated images for source evidence, factual screenshots, real people, real places, real products, logos, data charts, tables, or visuals that need verifiable factual accuracy. Use workspace/source assets instead, or report the missing asset.
27
- - If the visual needs exact editable text, precise data, axes, code, tables, or strict structure, patch the deck with HTML/CSS, ECharts, or `data-table` instead of `imagegen`.
28
- - Generated images are artifact-level visual patches only. Do not add them to evidence, source materials, narrative support, or factual trace.
29
- - If a generated image is referenced by deck HTML, move or copy the final asset into the workspace, preferably under `assets/<topic>/media/` or the project's existing asset directory. Deck HTML must reference a workspace-relative local path, never Codex's default generated-image path.
13
+ 2. For a plain review request, call `revela_review_deck_open` and let the tool open the browser by default.
14
+ 3. Use `revela_review_deck_read`, normally with `format: "markdown"`, only when the user explicitly asks for diagnostics, QA details, export readiness, or no-GUI output.
15
+ 4. Review UI is QA + Comment/Apply Fix. Insight/Inspect is removed.
16
+ 5. Do not call `revela_run_deck_qa` separately for a normal Review UI open.
17
+ 6. Pure visual/layout/export fixes may patch artifacts directly when the user asks for a change, but read active design rules first with `revela_design_read` using `section: "rules"`.
18
+ 7. Content changes that affect the deck argument should update `deck-plan.md` first, then remake the deck.
30
19
 
31
20
  ## QA Notes
32
21
 
33
- - `revela_review_deck_read` is read-only: it must not mutate deck HTML, `revela-narrative/`, `deck-plan/`, assets, or compatibility state.
34
- - `revela_review_deck_open` opens the local Review server from the MCP process and uses the Codex `codex-exec` bridge for Insight and Comment/Apply Fix. It returns URL/token/open state and basic file metadata, not aggregate diagnostics.
35
- - `revela_run_deck_qa` may need browser-launch permission in Codex sandboxed sessions.
22
+ - `revela_review_deck_read` is read-only: it must not mutate deck HTML, `deck-plan.md`, assets, or compatibility state.
23
+ - `revela_review_deck_open` returns URL/token/open state and basic file metadata.
36
24
  - Repair hard QA errors before treating a deck as review-ready.
37
- - Deck slides must use `<section class="slide" ...>` with exactly one direct `.slide-canvas` child; missing, nested, or duplicate slide canvases are hard artifact failures.
38
- - Text clipping should usually be fixed with typography and spacing changes, not by deleting evidence or changing claim meaning.
39
- - A warning that a smoke/development artifact is not the active legacy deck target is non-blocking when the requested file passes hard artifact checks.
40
-
41
- ## Technical Blockers
42
-
43
- Hard blockers are limited to missing or ambiguous files, invalid HTML contract, invalid slide identity, canvas/export failure, malformed Markdown/frontmatter, or unsafe writes.
25
+ - Deck slides must use `<section class="slide" ...>` with exactly one direct `.slide-canvas` child.
package/skill/SKILL.md CHANGED
@@ -26,7 +26,7 @@ The active design is injected after this prompt. Follow it exactly.
26
26
  - Do not create or patch `DECKS.json` as workflow state.
27
27
  - Canonical narrative remains the authority for audience, decision, thesis,
28
28
  claims, evidence boundaries, objections, risks, and caveats.
29
- - When present, `deck-plan/` is the deck execution blueprint for slide order,
29
+ - When present, `deck-plan.md` is the deck execution blueprint for slide order,
30
30
  chapter batches, visual intent, and evidence trace. It does not replace
31
31
  canonical narrative meaning.
32
32
  - `DECKS.json.slides[]` is a compatibility/cache projection, not the authority
@@ -59,9 +59,9 @@ handoff exactly:
59
59
  deck-plan authoring requirements. It does not write the final slide list.
60
60
  4. If target slide count, audience, language, output purpose, or visual style is
61
61
  unclear, ask the user for the smallest needed confirmation. Then write
62
- `deck-plan/index.md` plus `deck-plan/slides/*.md` from the planning packet
63
- and requirements, including low-fidelity sketches and `## Narrative Links`.
64
- 5. Use `readDeckPlan` to inspect the current `deck-plan/` projection before
62
+ `deck-plan.md` from the planning packet and requirements, including
63
+ low-fidelity sketches and `sourceLinks`.
64
+ 5. Use `readDeckPlan` to inspect the current `deck-plan.md` projection before
65
65
  artifact review or HTML generation. Diagnostics are advisory unless they are
66
66
  artifact validity errors handled by QA.
67
67
  6. For a new deck HTML file, call `revela-deck-foundation` to create the
@@ -73,7 +73,7 @@ handoff exactly:
73
73
  user proceeds and the deck contract can be satisfied.
74
74
 
75
75
  Before any HTML generation, call `revela-decks` action `readDeckPlan` and follow
76
- the current `deck-plan/`: Source Authority, deck parameters, Chapter Writing
76
+ the current `deck-plan.md`: Source Authority, deck parameters, Chapter Writing
77
77
  Batches, slide plan, visual intent, evidence trace, boundaries, and narrative
78
78
  links. Do not call `compileDeckPlan` merely to understand an existing plan, and
79
79
  do not reinterpret cached `DECKS.json.slides[]` as the render contract.
@@ -116,20 +116,19 @@ the deck's chapter grouping and the order of non-structural slides that follow.
116
116
 
117
117
  Before writing HTML, the deck-plan projection should include:
118
118
 
119
- - `deck-plan/index.md` with current `narrativeHash` when known and a slide-file
120
- inventory.
121
- - `deck-plan/slides/*.md` files for each planned slide, using `## Narrative
122
- Links` for `[[claim-id]]`, `[[evidence-id]]`, `[[risk-id]]`,
123
- `[[objection-id]]`, or `[[gap-id]]` references.
119
+ - `deck-plan.md` with `designName`, `outputPath` when known, chapter map, and
120
+ ordered slide blocks.
121
+ - Each slide block uses `sourceLinks` for materials, findings, assets, URLs,
122
+ and caveats. Legacy narrative links may be read for compatibility, but new
123
+ plans should not use them.
124
124
  - `Required structure: Cover + Table of Contents + Closing`.
125
125
  - A `Chapters` section with 3-5 TOC headings, slide ranges, and the
126
126
  non-structural slides assigned to each chapter.
127
- - One row per slide with title, purpose, narrative role, content summary, layout,
128
- components, primary/supporting claim ids, evidence binding ids or source
129
- summary, `content.data.visualIntent`, `visuals[]`, and caveats/unsupported
130
- scope.
131
- - Source Authority, Chapter Writing Batches, Evidence Trace, Boundary / Risk
132
- Treatment, and HTML Identity Contract sections.
127
+ - One row/block per slide with title, purpose, narrative role, content summary,
128
+ layout, components, `sourceLinks`, visual intent, visual brief, render notes,
129
+ and caveats/unsupported scope.
130
+ - Source Authority, Chapter Map, Slides, Unresolved Inputs, and HTML Contract
131
+ sections.
133
132
  - A low-fidelity layout sketch for every slide when requested by the handoff
134
133
  prompt.
135
134
 
@@ -138,7 +137,11 @@ Rules for the slide plan:
138
137
  - Use one lightweight narrative role when clear: `context`, `tension`,
139
138
  `evidence`, `recommendation`, `risk`, `ask`, `appendix`, or `close`.
140
139
  - Use exact layout names from the Layout Index and exact component names from
141
- the Component Index. Do not invent layout or component names.
140
+ the Component Index. Use only slots returned by the selected layout inventory.
141
+ Do not invent layout, slot, or component names.
142
+ - Use `box.children` when several child components support one semantic idea.
143
+ Do not duplicate a child component both inside `box.children` and as a
144
+ separate top-level component plan entry.
142
145
  - Content summaries must be specific: real claims, numbers, evidence, or actions
143
146
  from narrative state and bound sources. Avoid vague descriptions like
144
147
  "overview of topic".
@@ -157,7 +160,7 @@ Rules for the slide plan:
157
160
  count or merge weak slides instead of creating sparse filler.
158
161
 
159
162
  Do not write any HTML until the user chooses to proceed from the current
160
- `deck-plan/` projection. `confirmDeckPlan` is compatibility/provenance only, not
163
+ `deck-plan.md` projection. `confirmDeckPlan` is compatibility/provenance only, not
161
164
  a required workflow gate.
162
165
 
163
166
  ---
@@ -251,7 +254,7 @@ Required contract:
251
254
  when the HTML remains valid and every written slide satisfies this contract.
252
255
  Do not use filler or hidden overflow to make missing chapters appear complete.
253
256
  - Do not treat cached `DECKS.json.slides[]` length mismatches as an HTML identity
254
- failure; plan completeness belongs to `deck-plan/` projection Markdown and
257
+ failure; plan completeness belongs to `deck-plan.md` and
255
258
  chapter batches when present.
256
259
 
257
260
  Example slide identity:
@@ -1,24 +0,0 @@
1
- ---
2
- name: revela-story
3
- description: Inspect a Revela narrative graph in Codex without mutating artifacts or canonical meaning.
4
- ---
5
-
6
- # Revela Story
7
-
8
- Use this skill when the user asks to view, inspect, understand, or audit the current Revela story.
9
-
10
- ## Workflow
11
-
12
- 1. Call `revela_story_read` first, normally with `format: "markdown"`.
13
- 2. Use the returned deterministic map, diagnostics, narrative hash, and Markdown reading view as the authoritative Story surface.
14
- 3. Call `revela_markdown_qa` or `revela_compile_narrative` only when you need deeper structural diagnostics than `revela_story_read` returned.
15
- 4. If `revela_story_read.ok` is false because `revela-narrative/` is missing, report the init guidance. Do not create files from Story mode.
16
- 5. Present audience, belief shift, decision/action, thesis, central claims, evidence, objections, risks, research gaps, artifact coverage, and diagnostics.
17
- 6. Keep claim ids, evidence ids, source facts, quotes, URLs, numbers, and caveats exact.
18
- 7. Do not write claims, evidence, research gaps, deck HTML, deck-plan files, assets, or artifacts from Story mode.
19
-
20
- ## Output
21
-
22
- Lead with the narrative status, narrative hash, and key diagnostics. Then show the claim flow and evidence boundaries.
23
-
24
- Keep the reading evidence-first: for each claim, show source trace, support scope, unsupported scope, caveat, support strength, linked objections/risks, and remaining research gaps. Separate structural Markdown QA from evidence trust. Story is read-only; do not turn it into a mutation workflow.