mustflow 2.115.16 → 2.116.0

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 (28) hide show
  1. package/dist/cli/lib/run-plan.js +5 -1
  2. package/dist/core/approval-actions.js +28 -0
  3. package/dist/core/command-contract-validation.js +0 -41
  4. package/dist/core/skill-route-resolution.js +34 -3
  5. package/package.json +1 -1
  6. package/templates/default/i18n.toml +49 -13
  7. package/templates/default/locales/en/.mustflow/skills/INDEX.md +25 -1
  8. package/templates/default/locales/en/.mustflow/skills/adapter-boundary/SKILL.md +9 -8
  9. package/templates/default/locales/en/.mustflow/skills/agent-execution-control-review/SKILL.md +13 -1
  10. package/templates/default/locales/en/.mustflow/skills/api-contract-change/SKILL.md +2 -1
  11. package/templates/default/locales/en/.mustflow/skills/command-pattern/SKILL.md +11 -7
  12. package/templates/default/locales/en/.mustflow/skills/concurrency-invariant-review/SKILL.md +3 -1
  13. package/templates/default/locales/en/.mustflow/skills/credit-ledger-integrity-review/SKILL.md +4 -1
  14. package/templates/default/locales/en/.mustflow/skills/dual-write-consistency/SKILL.md +170 -0
  15. package/templates/default/locales/en/.mustflow/skills/durable-workflow-orchestration/SKILL.md +167 -0
  16. package/templates/default/locales/en/.mustflow/skills/execution-ledger-integrity-review/SKILL.md +161 -0
  17. package/templates/default/locales/en/.mustflow/skills/idempotency-integrity-review/SKILL.md +5 -3
  18. package/templates/default/locales/en/.mustflow/skills/llm-token-cost-control-review/SKILL.md +5 -1
  19. package/templates/default/locales/en/.mustflow/skills/migration-safety-check/SKILL.md +4 -1
  20. package/templates/default/locales/en/.mustflow/skills/parser-engineering-review/SKILL.md +332 -0
  21. package/templates/default/locales/en/.mustflow/skills/policy-decision-integrity-review/SKILL.md +170 -0
  22. package/templates/default/locales/en/.mustflow/skills/public-json-contract-change/SKILL.md +2 -1
  23. package/templates/default/locales/en/.mustflow/skills/queue-processing-integrity-review/SKILL.md +6 -2
  24. package/templates/default/locales/en/.mustflow/skills/routes.toml +108 -0
  25. package/templates/default/locales/en/.mustflow/skills/state-machine-pattern/SKILL.md +5 -3
  26. package/templates/default/locales/en/.mustflow/skills/structured-concurrency-supervision-review/SKILL.md +155 -0
  27. package/templates/default/locales/en/.mustflow/skills/transaction-boundary-integrity-review/SKILL.md +5 -2
  28. package/templates/default/manifest.toml +47 -1
@@ -89,6 +89,12 @@ route_type = "primary"
89
89
  priority = 80
90
90
  applies_to_reasons = ["code_change", "behavior_change"]
91
91
 
92
+ [routes."command-pattern".dependencies]
93
+ unlocks_on = [
94
+ { signal = "budget_reservation", skill = "credit-ledger-integrity-review" },
95
+ { signal = "reservation_settlement", skill = "transaction-boundary-integrity-review" },
96
+ ]
97
+
92
98
  [routes."command-pattern".contexts]
93
99
  file_types = ["ts", "tsx", "js", "jsx", "py", "go", "rs"]
94
100
  layers = ["application", "service", "workflow", "queue", "mutation"]
@@ -204,6 +210,76 @@ pattern_categories = ["state_transition", "lifecycle_model", "allowed_action"]
204
210
  positive_terms = ["allowed", "history", "irreversible", "lifecycle", "phase", "state", "status", "transition", "workflow"]
205
211
  negative_terms = ["algorithm", "pricing", "provider", "strategy", "variant", "wrapper"]
206
212
 
213
+ [routes."durable-workflow-orchestration"]
214
+ category = "general_code"
215
+ route_type = "primary"
216
+ priority = 85
217
+ applies_to_reasons = ["unknown_change", "code_change", "behavior_change", "test_change", "public_api_change", "performance_change", "security_change", "privacy_change", "data_change", "migration_change", "docs_change", "package_metadata_change", "release_risk"]
218
+
219
+ [routes."durable-workflow-orchestration".dependencies]
220
+ requires_skills = ["execution-ledger-integrity-review"]
221
+ suggests_adjuncts = ["idempotency-integrity-review", "retry-policy-integrity-review"]
222
+ unlocks_on = [
223
+ { signal = "commit_publish_split", skill = "dual-write-consistency" },
224
+ { signal = "child_join_cancel", skill = "structured-concurrency-supervision-review" },
225
+ ]
226
+
227
+ [routes."durable-workflow-orchestration".contexts]
228
+ positive_terms = ["activity", "checkpoint", "compensate", "compensation", "durable", "orchestration", "resume", "saga", "workflow"]
229
+ negative_terms = ["agentic", "llm", "prompt", "tool-call"]
230
+
231
+ [routes."dual-write-consistency"]
232
+ category = "general_code"
233
+ route_type = "adjunct"
234
+ priority = 82
235
+ applies_to_reasons = ["unknown_change", "code_change", "behavior_change", "test_change", "public_api_change", "performance_change", "security_change", "privacy_change", "data_change", "migration_change", "docs_change", "package_metadata_change", "release_risk"]
236
+
237
+ [routes."dual-write-consistency".dependencies]
238
+ suggests_adjuncts = ["transaction-boundary-integrity-review", "queue-processing-integrity-review"]
239
+
240
+ [routes."dual-write-consistency".contexts]
241
+ positive_terms = ["after-commit", "commit-publish", "dual-write", "outbox", "publish", "reconcile", "reconciliation", "transactional-outbox"]
242
+ negative_terms = ["approval", "budget", "child", "credit", "ledger", "llm", "policy", "supervisor", "tool"]
243
+
244
+ [routes."structured-concurrency-supervision-review"]
245
+ category = "general_code"
246
+ route_type = "adjunct"
247
+ priority = 81
248
+ applies_to_reasons = ["unknown_change", "code_change", "behavior_change", "test_change", "public_api_change", "performance_change", "security_change", "privacy_change", "data_change"]
249
+
250
+ [routes."structured-concurrency-supervision-review".dependencies]
251
+ suggests_adjuncts = ["concurrency-invariant-review", "async-timing-boundary-review"]
252
+
253
+ [routes."structured-concurrency-supervision-review".contexts]
254
+ positive_terms = ["cancel", "cancellation", "child", "join", "nursery", "parent", "sibling", "supervisor", "taskgroup"]
255
+ negative_terms = ["distributed", "fencing", "lease", "leased", "outbox", "worker"]
256
+
257
+ [routes."execution-ledger-integrity-review"]
258
+ category = "general_code"
259
+ route_type = "adjunct"
260
+ priority = 82
261
+ applies_to_reasons = ["unknown_change", "code_change", "behavior_change", "test_change", "public_api_change", "performance_change", "security_change", "privacy_change", "data_change", "migration_change", "docs_change", "package_metadata_change", "release_risk"]
262
+
263
+ [routes."execution-ledger-integrity-review".dependencies]
264
+ suggests_adjuncts = ["idempotency-integrity-review", "transaction-boundary-integrity-review"]
265
+
266
+ [routes."execution-ledger-integrity-review".contexts]
267
+ positive_terms = ["attempt", "checkpoint", "effect", "execution", "ledger", "receipt", "replay", "sequence"]
268
+ negative_terms = ["accounting", "balance", "billing", "credit", "points", "settlement", "wallet"]
269
+
270
+ [routes."policy-decision-integrity-review"]
271
+ category = "security_privacy"
272
+ route_type = "adjunct"
273
+ priority = 82
274
+ applies_to_reasons = ["unknown_change", "code_change", "behavior_change", "test_change", "public_api_change", "security_change", "privacy_change", "data_change", "migration_change", "docs_change", "package_metadata_change", "release_risk"]
275
+
276
+ [routes."policy-decision-integrity-review".dependencies]
277
+ suggests_adjuncts = ["business-rule-leakage-review", "api-access-control-review"]
278
+
279
+ [routes."policy-decision-integrity-review".contexts]
280
+ positive_terms = ["allow", "approval", "capability", "decision", "deny", "explain", "obligation", "policy", "reason", "scope", "version"]
281
+ negative_terms = ["discount", "pricing", "provider-selection", "strategy"]
282
+
207
283
  [routes."result-option"]
208
284
  category = "architecture_patterns"
209
285
  route_type = "primary"
@@ -420,6 +496,12 @@ route_type = "adjunct"
420
496
  priority = 71
421
497
  applies_to_reasons = ["unknown_change", "code_change", "behavior_change", "test_change", "performance_change", "ui_change", "data_change"]
422
498
 
499
+ [routes."parser-engineering-review"]
500
+ category = "general_code"
501
+ route_type = "adjunct"
502
+ priority = 79
503
+ applies_to_reasons = ["unknown_change", "code_change", "behavior_change", "test_change", "public_api_change", "performance_change", "security_change", "data_change"]
504
+
423
505
  [routes."type-state-modeling-review"]
424
506
  category = "general_code"
425
507
  route_type = "adjunct"
@@ -612,12 +694,23 @@ route_type = "primary"
612
694
  priority = 82
613
695
  applies_to_reasons = ["code_change", "behavior_change", "public_api_change", "docs_change", "test_change", "data_change", "migration_change", "performance_change", "security_change", "privacy_change"]
614
696
 
697
+ [routes."api-contract-change".dependencies]
698
+ unlocks_on = [
699
+ { signal = "contract_version_migration", skill = "migration-safety-check" },
700
+ { signal = "contract_version_migration", skill = "contract-sync-check" },
701
+ ]
702
+
615
703
  [routes."backend-reliability-change"]
616
704
  category = "general_code"
617
705
  route_type = "primary"
618
706
  priority = 84
619
707
  applies_to_reasons = ["code_change", "behavior_change", "public_api_change", "data_change", "migration_change", "performance_change", "security_change", "privacy_change", "docs_change", "test_change", "package_metadata_change", "release_risk"]
620
708
 
709
+ [routes."backend-reliability-change".dependencies]
710
+ unlocks_on = [
711
+ { signal = "commit_publish_split", skill = "dual-write-consistency" },
712
+ ]
713
+
621
714
  [routes."http-delivery-streaming"]
622
715
  category = "general_code"
623
716
  route_type = "primary"
@@ -774,6 +867,16 @@ route_type = "primary"
774
867
  priority = 70
775
868
  applies_to_reasons = ["unknown_change", "code_change", "behavior_change", "test_change", "docs_change", "public_api_change", "data_change", "performance_change", "security_change", "privacy_change", "package_metadata_change", "release_risk"]
776
869
 
870
+ [routes."agent-execution-control-review".dependencies]
871
+ unlocks_on = [
872
+ { signal = "capability_scoped_tool", skill = "policy-decision-integrity-review" },
873
+ { signal = "capability_scoped_tool", skill = "security-flow-review" },
874
+ ]
875
+
876
+ [routes."agent-execution-control-review".contexts]
877
+ positive_terms = ["autonomy", "capability", "executor", "guardrail", "handoff", "interrupt", "planner", "resume", "tool-call"]
878
+ negative_terms = ["benchmark", "eval", "grader", "judge", "score", "trajectory"]
879
+
777
880
  [routes."browser-automation-reliability-review"]
778
881
  category = "general_code"
779
882
  route_type = "primary"
@@ -1026,6 +1129,11 @@ route_type = "primary"
1026
1129
  priority = 85
1027
1130
  applies_to_reasons = ["code_change", "security_change", "privacy_change", "public_api_change"]
1028
1131
 
1132
+ [routes."auth-permission-change".dependencies]
1133
+ unlocks_on = [
1134
+ { signal = "allow_deny_approval", skill = "policy-decision-integrity-review" },
1135
+ ]
1136
+
1029
1137
  [routes."api-access-control-review"]
1030
1138
  category = "security_privacy"
1031
1139
  route_type = "adjunct"
@@ -2,7 +2,7 @@
2
2
  mustflow_doc: skill.state-machine-pattern
3
3
  locale: en
4
4
  canonical: true
5
- revision: 5
5
+ revision: 6
6
6
  lifecycle: mustflow-owned
7
7
  authority: procedure
8
8
  name: state-machine-pattern
@@ -29,7 +29,7 @@ metadata:
29
29
  <!-- mustflow-section: purpose -->
30
30
  ## Purpose
31
31
 
32
- Keep lifecycle state changes in one explicit rule system.
32
+ Keep one entity's lifecycle state changes in one explicit rule system.
33
33
 
34
34
  The state machine pattern applies when an entity moves through meaningful lifecycle states and the allowed actions, errors, follow-up work, or audit expectations depend on the current state. The core artifact is not a class hierarchy. The core artifact is the transition table: current state, event, guard, next state, and effects as data.
35
35
 
@@ -59,6 +59,7 @@ Use this skill to prevent scattered `if`, `switch`, direct assignment, silent no
59
59
  - State does not affect allowed actions.
60
60
  - The code is a pure calculation, formatter, mapper, parser, or local UI-only state update.
61
61
  - A simple create, read, update, delete flow only distinguishes active and deleted and has no meaningful transition rules, recovery behavior, retention behavior, or audit need.
62
+ - The lifecycle coordinates multiple independently persisted entities, services, process-loss recovery, callbacks, or compensation; use `durable-workflow-orchestration`. Keep this skill for each entity's local transition rules.
62
63
 
63
64
  Two states can still require this skill when the lifecycle is meaningful, such as active to suspended to deleted, deleted being irreversible, or suspension requiring audit and authorization.
64
65
 
@@ -165,7 +166,7 @@ Two states can still require this skill when the lifecycle is meaningful, such a
165
166
  15. Split state machines when one state string explodes.
166
167
  - If payment, fulfillment, refund, moderation, or account status change independently, use separate state machines.
167
168
  - State-machine splits require explicit cross-machine invariants, such as fulfillment not shipping before payment succeeds.
168
- - Put cross-machine coordination in a domain service, command handler, workflow, or pure policy that calls the smaller machines.
169
+ - Put same-commit cross-machine coordination in a domain service, command handler, or pure policy. Route independently persisted multi-entity coordination, process-loss recovery, callbacks, and compensation to `durable-workflow-orchestration`.
169
170
  16. Document only the useful lifecycle contract.
170
171
  - For important domains, document state list, event list, transition table, terminal states, guards, effects, concurrency method, duplicate-event handling, and any cross-machine invariants.
171
172
  - Diagrams are secondary. The code transition table is the source of truth.
@@ -183,6 +184,7 @@ Two states can still require this skill when the lifecycle is meaningful, such a
183
184
 
184
185
  - State cannot be changed outside the transition function or dispatch path.
185
186
  - Every allowed transition is visible in one transition table.
187
+ - The transition table governs one entity lifecycle; it does not claim durable orchestration across independently persisted entities or services.
186
188
  - Impossible transitions return explicit errors instead of being ignored.
187
189
  - Guards are pure and external facts are passed through context.
188
190
  - External work is represented through pending, success, and failure events, with effects executed after persistence.
@@ -0,0 +1,155 @@
1
+ ---
2
+ mustflow_doc: skill.structured-concurrency-supervision-review
3
+ locale: en
4
+ canonical: true
5
+ revision: 1
6
+ lifecycle: mustflow-owned
7
+ authority: procedure
8
+ name: structured-concurrency-supervision-review
9
+ description: Apply this skill when one runtime parent starts concurrent child tasks, workers, coroutines, threads, goroutines, or agent-runtime children and correctness depends on bounded fan-out, ownership, deadline and cancellation propagation, joining, sibling failure policy, cleanup, and rejection of late results.
10
+ metadata:
11
+ mustflow_schema: "1"
12
+ mustflow_kind: procedure
13
+ pack_id: mustflow.core
14
+ skill_id: mustflow.core.structured-concurrency-supervision-review
15
+ command_intents:
16
+ - changes_status
17
+ - changes_diff_summary
18
+ - lint
19
+ - build
20
+ - test_related
21
+ - test
22
+ - test_audit
23
+ - docs_validate_fast
24
+ - test_release
25
+ - mustflow_check
26
+ ---
27
+
28
+ # Structured Concurrency Supervision Review
29
+
30
+ <!-- mustflow-section: purpose -->
31
+ ## Purpose
32
+
33
+ Keep concurrent children inside an explicit lifetime tree. Make the parent own admission, inherited
34
+ authority, bounded fan-out, failure propagation, cancellation, join, result admission, and cleanup
35
+ so terminal parent state cannot leave invisible work mutating the world.
36
+
37
+ <!-- mustflow-section: use-when -->
38
+ ## Use When
39
+
40
+ - One request, run, task, worker invocation, or runtime agent dynamically starts child tasks.
41
+ - Code uses task groups, nurseries, supervisors, join sets, futures, goroutines, coroutines, threads,
42
+ abort controllers, cancellation tokens, or parallel sub-operations.
43
+ - Parent completion can race with orphaned children, late results, sibling failure, cancellation,
44
+ cleanup, retry, or unbounded fan-out.
45
+
46
+ <!-- mustflow-section: do-not-use-when -->
47
+ ## Do Not Use When
48
+
49
+ - Several coding agents coordinate files, worktrees, commands, and merges; use
50
+ `multi-agent-work-coordination`.
51
+ - The main problem is a shared variable, lock, CAS, database row, or transaction invariant with no
52
+ parent-child task tree; use `race-condition-review` or `concurrency-invariant-review`.
53
+ - The main problem is durable broker redelivery or worker crash recovery; use
54
+ `queue-processing-integrity-review`.
55
+ - The flow must survive process loss and resume from persisted steps; use
56
+ `durable-workflow-orchestration`.
57
+ - An independent daemon or service has its own declared lifecycle. It is not a structured child just
58
+ because another process started it once.
59
+
60
+ <!-- mustflow-section: required-inputs -->
61
+ ## Required Inputs
62
+
63
+ - Task-tree ledger: parent, children, spawn site, join owner, and terminal owner.
64
+ - Inherited-boundary ledger: deadline, cancellation, tenant, capability, budget, trace, and source
65
+ version passed to each child.
66
+ - Fan-out ledger: admission rule, concurrency limit, pending limit, queueing, and backpressure.
67
+ - Completion-policy ledger: fail-fast, collect-all, quorum, partial success, ordering, and error shape.
68
+ - Cancellation, cleanup, retry, and non-cancellable finalization ledger.
69
+ - Result-admission ledger: generation or run version, stale-result rule, and aggregation owner.
70
+
71
+ <!-- mustflow-section: preconditions -->
72
+ ## Preconditions
73
+
74
+ - Read the nearest instructions, command contract, spawn and join sites, task runtime, resource
75
+ ownership, retry wrappers, cancellation paths, and current concurrency tests.
76
+ - Name the live parent whose lifetime bounds the work. If no parent exists, report detached work
77
+ explicitly instead of calling it structured concurrency.
78
+ - Treat framework cancellation and task-group semantics as version-sensitive evidence.
79
+
80
+ <!-- mustflow-section: allowed-edits -->
81
+ ## Allowed Edits
82
+
83
+ - Add or tighten task groups, supervisors, bounded queues, semaphores, cancellation propagation,
84
+ deadline inheritance, join and aggregation logic, stale-result guards, cleanup, focused tests,
85
+ metrics, docs, and directly synchronized templates.
86
+ - Move intentionally durable detached work behind a queue or workflow handoff with a named external
87
+ owner.
88
+ - Do not hide orphaning with fire-and-forget wrappers, background promises, swallowed join errors,
89
+ unbounded parallel maps, or process-exit cleanup assumptions.
90
+
91
+ <!-- mustflow-section: procedure -->
92
+ ## Procedure
93
+
94
+ 1. Place every spawn site in a task tree and name the parent, child purpose, join owner, and terminal
95
+ owner. Classify any detached task as an explicit external handoff or a defect.
96
+ 2. Propagate the parent deadline and cancellation signal to every child. Clamp child deadlines so a
97
+ child cannot outlive the parent unless ownership is durably transferred.
98
+ 3. Propagate tenant, capability, budget, trace, and source-version context without widening it. A
99
+ child may receive less authority, never more by accident.
100
+ 4. Bound active fan-out and queued work separately. Define rejection, backpressure, batching, or
101
+ degradation when either limit is reached.
102
+ 5. Choose one completion policy: fail-fast, collect-all, quorum, ordered aggregation, or explicit
103
+ partial success. Define which sibling failures cancel other work and which results remain usable.
104
+ 6. Join or durably hand off every child before the parent reports terminal success, failure, or
105
+ cancellation. A returned promise that only schedules work is not completion evidence.
106
+ 7. Make cancellation cooperative and cleanup-safe. Bound grace periods and keep non-cancellable
107
+ finalization limited to restoring local invariants or releasing owned resources.
108
+ 8. Prevent retry multiplication between child code, supervisor restart, parent retry, and outer
109
+ request retry. Give the whole tree one bounded attempt and elapsed-time story.
110
+ 9. Tag child results with parent run or generation identity. Reject completions from a cancelled,
111
+ superseded, or closed parent before aggregation or side effects.
112
+ 10. Release permits, buffers, files, connections, locks, temporary state, and child-owned processes
113
+ on success, error, cancellation, and partial spawn failure.
114
+ 11. Test parent cancellation, child hang, sibling failure, spawn storm, partial spawn, late result,
115
+ cleanup failure, retry amplification, and terminal reporting before all joins complete.
116
+
117
+ <!-- mustflow-section: postconditions -->
118
+ ## Postconditions
119
+
120
+ - Every child has one live parent or a named durable external owner.
121
+ - Parent terminal reporting cannot leave an unauthorized child effect running.
122
+ - Active work, queued work, retries, cancellation waits, joins, and cleanup are bounded.
123
+ - Late or superseded results cannot enter a new parent generation or mutate closed state.
124
+
125
+ <!-- mustflow-section: verification -->
126
+ ## Verification
127
+
128
+ - Use configured `changes_status` and `changes_diff_summary` for scope evidence.
129
+ - Use `lint`, `build`, and `test_related` for runtime changes and controlled interleavings; use `test`
130
+ or `test_audit` for shared supervisors or broad test claims.
131
+ - Use `docs_validate_fast`, `test_release`, and `mustflow_check` for docs, package, template, or
132
+ Mustflow changes.
133
+ - Report unavailable scheduler fuzzing, runtime tracing, load, or live cancellation evidence rather
134
+ than inventing commands.
135
+
136
+ <!-- mustflow-section: failure-handling -->
137
+ ## Failure Handling
138
+
139
+ - If no parent or join owner can be named, stop the structured-concurrency claim and report detached
140
+ lifetime risk.
141
+ - If cancellation cannot reach a child, transfer ownership durably or keep the parent non-terminal
142
+ until the child stops; do not pretend cancellation succeeded.
143
+ - If cleanup or join can wait forever, add a bounded escalation or report the unresolved resource.
144
+ - If verification fails, preserve the task-tree interleaving and use `failure-triage` before changing
145
+ unrelated concurrency code.
146
+
147
+ <!-- mustflow-section: output-format -->
148
+ ## Output Format
149
+
150
+ - Parent-child task tree and ownership decisions
151
+ - Deadline, cancellation, capability, budget, trace, and generation inheritance
152
+ - Fan-out, completion, join, retry, cleanup, and late-result policies
153
+ - Controlled interleaving and failure evidence
154
+ - Files changed and compatibility impact
155
+ - Command intents run, skipped checks, and remaining supervision risk
@@ -2,7 +2,7 @@
2
2
  mustflow_doc: skill.transaction-boundary-integrity-review
3
3
  locale: en
4
4
  canonical: true
5
- revision: 1
5
+ revision: 2
6
6
  lifecycle: mustflow-owned
7
7
  authority: procedure
8
8
  name: transaction-boundary-integrity-review
@@ -50,6 +50,8 @@ The review question is not "is there a transaction?" It is "does the read -> dec
50
50
  - The task is primarily retries, queue reliability, provider deadlines, health checks, outbox processing, or operational failure handling; use `backend-reliability-change`.
51
51
  - The task is payment, credit, wallet, or ledger specific and the transaction issue is only one part of money-event integrity; use `payment-integrity-review` or `credit-ledger-integrity-review` first.
52
52
  - The transaction is a tiny single-row write with no prior decision, no concurrency-sensitive invariant, no external side effect, no retry, and no framework propagation risk.
53
+ - The main problem is convergence after a database, broker, provider, or second database commits independently; use `dual-write-consistency`. This skill owns each local transaction boundary only.
54
+ - The main problem is compensation order or resumable recovery across those commits; use `durable-workflow-orchestration`.
53
55
 
54
56
  <!-- mustflow-section: required-inputs -->
55
57
  ## Required Inputs
@@ -127,13 +129,14 @@ The review question is not "is there a transaction?" It is "does the read -> dec
127
129
  - Email, cache eviction, queue publish, HTTP API calls, payment provider calls, object storage writes, file uploads, and search indexing do not roll back with the database.
128
130
  - Prefer after-commit hooks for non-critical callbacks and outbox records for durable side effects that must eventually happen.
129
131
  - Remember that an after-commit callback failure does not roll back an already committed database transaction.
132
+ - When the database and external system can commit independently, route convergence to `dual-write-consistency`; keep this review limited to the local transaction's reads, decisions, writes, commit, and after-commit handoff.
130
133
  11. Review transaction width and resource pressure.
131
134
  - Do not hold locks or connections across HTTP API calls, file uploads, sleeps, large loops, slow calculations, logging sinks, JSON serialization, queue waits, or user-controlled waits.
132
135
  - Timeouts do not undo already-sent external effects.
133
136
  - `REQUIRES_NEW`, nested service calls, and transaction-per-item loops can exhaust connection pools.
134
137
  12. Review multi-database and transaction-manager scope.
135
138
  - A transaction annotation or helper may cover only one data source, ORM session, connection, or transaction manager.
136
- - Cross-database updates, external services, caches, search indexes, queues, and object storage need outbox, saga, compensation, reconciliation, or manual recovery rather than pretend single-transaction atomicity.
139
+ - Cross-database, broker, and provider convergence belongs to `dual-write-consistency`; ordered compensation and resumable recovery belong to `durable-workflow-orchestration`. Do not pretend one local transaction owns either protocol.
137
140
  13. Review advisory and distributed locks.
138
141
  - PostgreSQL session-level advisory locks can survive rollback and require release or session end.
139
142
  - Transaction-level advisory locks release at transaction end and are usually safer for short critical sections.
@@ -1,6 +1,6 @@
1
1
  id = "default"
2
2
  name = "default"
3
- version = "2.115.16"
3
+ version = "2.116.0"
4
4
  description = "Minimal workflow for LLM agents to read, edit, and verify their work in a repository."
5
5
  common_root = "common"
6
6
  locales_root = "locales"
@@ -36,6 +36,11 @@ creates = [
36
36
  ".mustflow/skills/business-rule-leakage-review/SKILL.md",
37
37
  ".mustflow/skills/payment-integrity-review/SKILL.md",
38
38
  ".mustflow/skills/credit-ledger-integrity-review/SKILL.md",
39
+ ".mustflow/skills/dual-write-consistency/SKILL.md",
40
+ ".mustflow/skills/durable-workflow-orchestration/SKILL.md",
41
+ ".mustflow/skills/execution-ledger-integrity-review/SKILL.md",
42
+ ".mustflow/skills/policy-decision-integrity-review/SKILL.md",
43
+ ".mustflow/skills/structured-concurrency-supervision-review/SKILL.md",
39
44
  ".mustflow/skills/notification-delivery-integrity-review/SKILL.md",
40
45
  ".mustflow/skills/admin-control-plane-safety-review/SKILL.md",
41
46
  ".mustflow/skills/small-service-platform-architecture-review/SKILL.md",
@@ -72,6 +77,7 @@ creates = [
72
77
  ".mustflow/skills/website-task-friction-review/SKILL.md",
73
78
  ".mustflow/skills/cache-integrity-review/SKILL.md",
74
79
  ".mustflow/skills/quadratic-scan-review/SKILL.md",
80
+ ".mustflow/skills/parser-engineering-review/SKILL.md",
75
81
  ".mustflow/skills/type-state-modeling-review/SKILL.md",
76
82
  ".mustflow/skills/race-condition-review/SKILL.md",
77
83
  ".mustflow/skills/async-timing-boundary-review/SKILL.md",
@@ -283,6 +289,11 @@ minimal = [
283
289
  "business-rule-leakage-review",
284
290
  "payment-integrity-review",
285
291
  "credit-ledger-integrity-review",
292
+ "dual-write-consistency",
293
+ "durable-workflow-orchestration",
294
+ "execution-ledger-integrity-review",
295
+ "policy-decision-integrity-review",
296
+ "structured-concurrency-supervision-review",
286
297
  "notification-delivery-integrity-review",
287
298
  "admin-control-plane-safety-review",
288
299
  "small-service-platform-architecture-review",
@@ -319,6 +330,7 @@ minimal = [
319
330
  "website-task-friction-review",
320
331
  "cache-integrity-review",
321
332
  "quadratic-scan-review",
333
+ "parser-engineering-review",
322
334
  "type-state-modeling-review",
323
335
  "race-condition-review",
324
336
  "async-timing-boundary-review",
@@ -421,6 +433,7 @@ minimal = [
421
433
  "file-path-cross-platform-change",
422
434
  "idea-triage",
423
435
  "instruction-conflict-scope-check",
436
+ "migration-safety-check",
424
437
  "pattern-scout",
425
438
  "provenance-license-gate",
426
439
  "proactive-risk-surfacing",
@@ -463,6 +476,11 @@ patterns = [
463
476
  "business-rule-leakage-review",
464
477
  "payment-integrity-review",
465
478
  "credit-ledger-integrity-review",
479
+ "dual-write-consistency",
480
+ "durable-workflow-orchestration",
481
+ "execution-ledger-integrity-review",
482
+ "policy-decision-integrity-review",
483
+ "structured-concurrency-supervision-review",
466
484
  "notification-delivery-integrity-review",
467
485
  "admin-control-plane-safety-review",
468
486
  "small-service-platform-architecture-review",
@@ -499,6 +517,7 @@ patterns = [
499
517
  "website-task-friction-review",
500
518
  "cache-integrity-review",
501
519
  "quadratic-scan-review",
520
+ "parser-engineering-review",
502
521
  "type-state-modeling-review",
503
522
  "race-condition-review",
504
523
  "async-timing-boundary-review",
@@ -605,6 +624,7 @@ patterns = [
605
624
  "file-path-cross-platform-change",
606
625
  "idea-triage",
607
626
  "instruction-conflict-scope-check",
627
+ "migration-safety-check",
608
628
  "null-object-pattern",
609
629
  "pattern-scout",
610
630
  "pure-core-imperative-shell",
@@ -654,6 +674,11 @@ oss = [
654
674
  "business-rule-leakage-review",
655
675
  "payment-integrity-review",
656
676
  "credit-ledger-integrity-review",
677
+ "dual-write-consistency",
678
+ "durable-workflow-orchestration",
679
+ "execution-ledger-integrity-review",
680
+ "policy-decision-integrity-review",
681
+ "structured-concurrency-supervision-review",
657
682
  "notification-delivery-integrity-review",
658
683
  "admin-control-plane-safety-review",
659
684
  "small-service-platform-architecture-review",
@@ -690,6 +715,7 @@ oss = [
690
715
  "website-task-friction-review",
691
716
  "cache-integrity-review",
692
717
  "quadratic-scan-review",
718
+ "parser-engineering-review",
693
719
  "type-state-modeling-review",
694
720
  "race-condition-review",
695
721
  "async-timing-boundary-review",
@@ -864,6 +890,11 @@ team = [
864
890
  "business-rule-leakage-review",
865
891
  "payment-integrity-review",
866
892
  "credit-ledger-integrity-review",
893
+ "dual-write-consistency",
894
+ "durable-workflow-orchestration",
895
+ "execution-ledger-integrity-review",
896
+ "policy-decision-integrity-review",
897
+ "structured-concurrency-supervision-review",
867
898
  "notification-delivery-integrity-review",
868
899
  "admin-control-plane-safety-review",
869
900
  "small-service-platform-architecture-review",
@@ -900,6 +931,7 @@ team = [
900
931
  "website-task-friction-review",
901
932
  "cache-integrity-review",
902
933
  "quadratic-scan-review",
934
+ "parser-engineering-review",
903
935
  "type-state-modeling-review",
904
936
  "race-condition-review",
905
937
  "async-timing-boundary-review",
@@ -1009,6 +1041,7 @@ team = [
1009
1041
  "idea-triage",
1010
1042
  "complex-decision-analysis",
1011
1043
  "instruction-conflict-scope-check",
1044
+ "migration-safety-check",
1012
1045
  "multi-agent-work-coordination",
1013
1046
  "null-object-pattern",
1014
1047
  "pattern-scout",
@@ -1058,6 +1091,11 @@ product = [
1058
1091
  "business-rule-leakage-review",
1059
1092
  "payment-integrity-review",
1060
1093
  "credit-ledger-integrity-review",
1094
+ "dual-write-consistency",
1095
+ "durable-workflow-orchestration",
1096
+ "execution-ledger-integrity-review",
1097
+ "policy-decision-integrity-review",
1098
+ "structured-concurrency-supervision-review",
1061
1099
  "notification-delivery-integrity-review",
1062
1100
  "admin-control-plane-safety-review",
1063
1101
  "small-service-platform-architecture-review",
@@ -1094,6 +1132,7 @@ product = [
1094
1132
  "website-task-friction-review",
1095
1133
  "cache-integrity-review",
1096
1134
  "quadratic-scan-review",
1135
+ "parser-engineering-review",
1097
1136
  "type-state-modeling-review",
1098
1137
  "race-condition-review",
1099
1138
  "async-timing-boundary-review",
@@ -1203,6 +1242,7 @@ product = [
1203
1242
  "idea-triage",
1204
1243
  "complex-decision-analysis",
1205
1244
  "instruction-conflict-scope-check",
1245
+ "migration-safety-check",
1206
1246
  "llm-service-ux-review",
1207
1247
  "null-object-pattern",
1208
1248
  "pattern-scout",
@@ -1258,6 +1298,11 @@ library = [
1258
1298
  "business-rule-leakage-review",
1259
1299
  "payment-integrity-review",
1260
1300
  "credit-ledger-integrity-review",
1301
+ "dual-write-consistency",
1302
+ "durable-workflow-orchestration",
1303
+ "execution-ledger-integrity-review",
1304
+ "policy-decision-integrity-review",
1305
+ "structured-concurrency-supervision-review",
1261
1306
  "notification-delivery-integrity-review",
1262
1307
  "admin-control-plane-safety-review",
1263
1308
  "small-service-platform-architecture-review",
@@ -1294,6 +1339,7 @@ library = [
1294
1339
  "website-task-friction-review",
1295
1340
  "cache-integrity-review",
1296
1341
  "quadratic-scan-review",
1342
+ "parser-engineering-review",
1297
1343
  "type-state-modeling-review",
1298
1344
  "race-condition-review",
1299
1345
  "async-timing-boundary-review",