Skip to content

Commit bbaef0b

Browse files
authored
Merge branch 'main' into copilot/fix-double-encoding-jsonb-types
2 parents 50bca53 + ad46ef7 commit bbaef0b

4 files changed

Lines changed: 102 additions & 21 deletions

File tree

cmd/wfctl/modernize_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,7 @@ func TestModernizeAllRulesRegistered(t *testing.T) {
493493
"absolute-dbpath",
494494
"empty-routes",
495495
"camelcase-config",
496+
"request-parse-config",
496497
}
497498
if len(rules) != len(expectedIDs) {
498499
t.Errorf("expected %d rules, got %d", len(expectedIDs), len(rules))
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# Downstream Modernization: BMW, Ratchet, Ratchet-CLI
2+
3+
**Date:** 2026-03-11
4+
**Status:** Approved
5+
6+
## Goal
7+
8+
Ensure BMW, ratchet, and ratchet-cli take advantage of workflow engine improvements from v0.3.18 → v0.3.32 and modular v1.12.0 → v1.12.3.
9+
10+
## Changes
11+
12+
### 1. wfctl modernize --apply (BMW + Ratchet)
13+
14+
Run automated YAML fixes on both projects:
15+
16+
**BMW** (`buymywishlist-phase3/app.yaml`): ~364 issues
17+
- 305 hyphen-step names → underscore
18+
- ~40 `parse_body: true` → remove (body auto-parsed since v0.3.28)
19+
- 1 conditional-field using template syntax → dot-path
20+
- 2 camelCase config violations
21+
22+
**Ratchet** (`ratchet/config/*.yaml`): ~230+ issues
23+
- 228 hyphen-step names → underscore
24+
- 28 `parse_body: true` → remove
25+
- 5 camelCase config violations
26+
27+
### 2. step.parallel Adoption
28+
29+
**BMW pipelines** (6-8 candidates):
30+
- `user-dashboard`: parallelize count_wishlists + count_contributions
31+
- `analytics-overview`: parallelize check_permission + fetch_stats
32+
- `analytics-wishlists`: parallelize check_permission + fetch_stats
33+
- `analytics-contributions`: parallelize check_permission + fetch_stats
34+
- `analytics-revenue`: parallelize check_permission + fetch_revenue
35+
- `payment-create-intent`: parallelize check_mock_mode + get_tenant_settings
36+
- `admin-users-list`: parallelize fetch_role + fetch_users
37+
- `admin-audit-logs`: parallelize fetch_role + fetch_logs
38+
39+
**Ratchet** (1 candidate):
40+
- `/api/info` route: parallelize get-started-at + count-agents + count-teams (3 independent queries)
41+
42+
### 3. Execution Tracing Configuration
43+
44+
**BMW:**
45+
- Add `X-Workflow-Trace` to CORS allowedHeaders
46+
- Already has observability.otel + http.middleware.otel configured
47+
48+
**Ratchet:**
49+
- Add `X-Workflow-Trace` to CORS allowedHeaders (if CORS configured)
50+
- Already has observability.otel configured
51+
52+
### Out of Scope
53+
54+
- `ratchet modernize` CLI command (ratchet-cli is an AI agent client, not a workflow toolchain)
55+
- step.hash for bcrypt (only supports MD5/SHA256/SHA512)
56+
- Collection template functions replacing SQL aggregation (SQL is more efficient)
57+
- step.cli_print/cli_invoke for ratchet-cli (uses Bubbletea TUI)
58+
- Actor model (no current use case)
59+
60+
## Implementation Plan
61+
62+
### Phase 1: Automated YAML Modernization
63+
1. Run `wfctl modernize --apply` on BMW app.yaml
64+
2. Run `wfctl modernize --apply` on ratchet config/*.yaml
65+
3. Verify configs still parse correctly
66+
4. Commit changes
67+
68+
### Phase 2: step.parallel Adoption
69+
1. BMW: Refactor 6-8 pipelines to use step.parallel for independent queries
70+
2. Ratchet: Refactor /api/info route to use step.parallel
71+
3. Update template references to access parallel step outputs
72+
4. Commit changes
73+
74+
### Phase 3: Execution Tracing
75+
1. Add X-Workflow-Trace to CORS headers in both projects
76+
2. Commit changes
77+
78+
### Phase 4: Verify and Push
79+
1. Run wfctl validate on all configs
80+
2. Push all changes

go.mod

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ go 1.26.0
55
require (
66
cloud.google.com/go/storage v1.60.0
77
github.com/GoCodeAlone/go-plugin v0.0.0-20260220090904-b4c35f0e4271
8-
github.com/GoCodeAlone/modular v1.12.0
9-
github.com/GoCodeAlone/modular/modules/auth v1.12.0
10-
github.com/GoCodeAlone/modular/modules/cache v1.12.0
11-
github.com/GoCodeAlone/modular/modules/eventbus/v2 v2.5.1
12-
github.com/GoCodeAlone/modular/modules/jsonschema v1.12.0
13-
github.com/GoCodeAlone/modular/modules/reverseproxy/v2 v2.5.0
14-
github.com/GoCodeAlone/modular/modules/scheduler v1.12.0
8+
github.com/GoCodeAlone/modular v1.12.3
9+
github.com/GoCodeAlone/modular/modules/auth v1.14.0
10+
github.com/GoCodeAlone/modular/modules/cache v1.14.0
11+
github.com/GoCodeAlone/modular/modules/eventbus/v2 v2.7.0
12+
github.com/GoCodeAlone/modular/modules/jsonschema v1.14.0
13+
github.com/GoCodeAlone/modular/modules/reverseproxy/v2 v2.7.0
14+
github.com/GoCodeAlone/modular/modules/scheduler v1.14.0
1515
github.com/GoCodeAlone/yaegi v0.17.1
1616
github.com/IBM/sarama v1.47.0
1717
github.com/alicebob/miniredis/v2 v2.36.1

go.sum

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,20 @@ github.com/DataDog/datadog-go/v5 v5.4.0 h1:Ea3eXUVwrVV28F/fo3Dr3aa+TL/Z7Xi6SUPKW
3232
github.com/DataDog/datadog-go/v5 v5.4.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw=
3333
github.com/GoCodeAlone/go-plugin v0.0.0-20260220090904-b4c35f0e4271 h1:/oxxpYJ41BuK+/5Gp9c+0PHybyNFWeBHyCzkSVLCoMk=
3434
github.com/GoCodeAlone/go-plugin v0.0.0-20260220090904-b4c35f0e4271/go.mod h1:HbGQRZUIa+jbDfjsaZIMJYvrz+LnxL0mJpggfynSTMk=
35-
github.com/GoCodeAlone/modular v1.12.0 h1:C4tLfJe65rrUQsbtndiVfldtT8IRKZcHczNRNbBK4wo=
36-
github.com/GoCodeAlone/modular v1.12.0/go.mod h1:ET7mlekRjkRq9mwJdWmaC2KDUWvjla2IqKVFrYO2JnY=
37-
github.com/GoCodeAlone/modular/modules/auth v1.12.0 h1:eO4iq8tkz8W5sLKRSG5dC+ACITMtxZrtSJ+ReE3fKdA=
38-
github.com/GoCodeAlone/modular/modules/auth v1.12.0/go.mod h1:D+yfkgN3MTkyl1xe8h2UL7uqB9Vj1lO3wUrscfnJ/NU=
39-
github.com/GoCodeAlone/modular/modules/cache v1.12.0 h1:Ue6aXytFq1I+OnC3PcV2KlUg4lHiuGWH0Qq+v/lqyp0=
40-
github.com/GoCodeAlone/modular/modules/cache v1.12.0/go.mod h1:kSaT8wNy/3YGmtIpDqPbW6MRqKOp2yc8a5MHdAag2CE=
41-
github.com/GoCodeAlone/modular/modules/eventbus/v2 v2.5.1 h1:GTSJh+QbPj7nuXoiiz53+DPxJ3xw7JPemzBuWg6vKS4=
42-
github.com/GoCodeAlone/modular/modules/eventbus/v2 v2.5.1/go.mod h1:PvgkUxMg2RL/TjKevO3PBTy+RazZX5YXi8IK/Bz1qcw=
43-
github.com/GoCodeAlone/modular/modules/jsonschema v1.12.0 h1:urGK8Xtwku4tn8nBeVZn9UqvldnCptZ3rLCXO21vSz4=
44-
github.com/GoCodeAlone/modular/modules/jsonschema v1.12.0/go.mod h1:+/0p1alfSbhhshcNRId1HRRIupeu0DPC7BH8AYiBQ1I=
45-
github.com/GoCodeAlone/modular/modules/reverseproxy/v2 v2.5.0 h1:zcF46oZ7MJFfZCmzqc1n9ZTw6wrTJSFr04yaz6EYKeo=
46-
github.com/GoCodeAlone/modular/modules/reverseproxy/v2 v2.5.0/go.mod h1:ycmJYst0dgaeLYBDOFGYz3ZiVK0fVcbl59omBySpKis=
47-
github.com/GoCodeAlone/modular/modules/scheduler v1.12.0 h1:kxeLUpFFZ2HWV5B7Ra1WaOr1DDee5G6kAZ6F1BUXX/Y=
48-
github.com/GoCodeAlone/modular/modules/scheduler v1.12.0/go.mod h1:VpDSAU0Guj8geVz19YCSknyCJp0j3TMBaxLEYXedkZc=
35+
github.com/GoCodeAlone/modular v1.12.3 h1:WcNqc1ZG+Lv/xzF8wTDavGIOeAvlV4wEd5HO2mVTUwE=
36+
github.com/GoCodeAlone/modular v1.12.3/go.mod h1:nDdyW/eJu4gDFNueb6vWwLvti3bPHSZJHkWGiwEmi2I=
37+
github.com/GoCodeAlone/modular/modules/auth v1.14.0 h1:Y+p4/HIcxkajlcNhcPlqpwAt1SCHjB4AaDMEys50E3I=
38+
github.com/GoCodeAlone/modular/modules/auth v1.14.0/go.mod h1:fkwPn2svDsCHBI19gtUHxo064SL+EudjB+o7VjL9ug8=
39+
github.com/GoCodeAlone/modular/modules/cache v1.14.0 h1:ykQRwXJGXaRtAsnW9Tgs0LvXExonkKr8P7XIHxPaYdY=
40+
github.com/GoCodeAlone/modular/modules/cache v1.14.0/go.mod h1:tcIjHJHZ5fVU8sstILrXeVQgjpZcUkErnNjRaxkBSR8=
41+
github.com/GoCodeAlone/modular/modules/eventbus/v2 v2.7.0 h1:clGAyaOfyDc9iY63ONfZiHReVccVhK/yH19QEb14SSI=
42+
github.com/GoCodeAlone/modular/modules/eventbus/v2 v2.7.0/go.mod h1:0AnfWGVmrqyv91rduc6mrPqW6WQchDAa2WtM0Qmw/WA=
43+
github.com/GoCodeAlone/modular/modules/jsonschema v1.14.0 h1:dCiPIO+NvJPizfCeUQqGXHD1WitOVYpKuL3fxMEjRlw=
44+
github.com/GoCodeAlone/modular/modules/jsonschema v1.14.0/go.mod h1:5Hm+R9G41wwb0hKefx9+9PMqffjU1tA7roW3t3sTaLE=
45+
github.com/GoCodeAlone/modular/modules/reverseproxy/v2 v2.7.0 h1:TtVD+tE8ABN98n50MFVyMAvMsBM4JE86KRgCRDzPDC4=
46+
github.com/GoCodeAlone/modular/modules/reverseproxy/v2 v2.7.0/go.mod h1:N7d8aSV4eqr90qjlIOs/8EmW7avt9gwX06Uh+zKDr4s=
47+
github.com/GoCodeAlone/modular/modules/scheduler v1.14.0 h1:JSrzo4FB7uGASExv+fCLRd6pXWULV1mJYvzmM9PzUeM=
48+
github.com/GoCodeAlone/modular/modules/scheduler v1.14.0/go.mod h1:emkR2AnilabLJZv1rOTDO9eGpRBmZs487H00Lnp9jIc=
4949
github.com/GoCodeAlone/yaegi v0.17.1 h1:aPAwU29L9cGceRAff02c5pjQcT5KapDB4fWFZK9tElE=
5050
github.com/GoCodeAlone/yaegi v0.17.1/go.mod h1:z5Pr6Wse6QJcQvpgxTxzMAevFarH0N37TG88Y9dprx0=
5151
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 h1:sBEjpZlNHzK1voKq9695PJSX2o5NEXl7/OL3coiIY0c=

0 commit comments

Comments
 (0)