1212
1313---
1414
15- ### Task 1: Test and document built-in macros
15+ ## Task 1: Test and document built-in macros
1616
1717** Files:**
1818- Create: ` internal/cel/macros_test.go `
@@ -130,7 +130,7 @@ git commit -m "test(cel): add coverage for built-in map/filter/exists/all macros
130130
131131---
132132
133- ### Task 2: String functions — toLower, toUpper, trim
133+ ## Task 2: String functions — toLower, toUpper, trim
134134
135135** Files:**
136136- Create: ` internal/cel/functions.go `
@@ -329,7 +329,7 @@ git commit -m "feat(cel): add toLower, toUpper, trim string functions"
329329
330330---
331331
332- ### Task 3: String functions — replace and split
332+ ## Task 3: String functions — replace and split
333333
334334** Files:**
335335- Modify: ` internal/cel/functions.go `
@@ -441,7 +441,7 @@ git commit -m "feat(cel): add replace and split string functions"
441441
442442---
443443
444- ### Task 4: Type coercion — parseInt, parseFloat, toString
444+ ## Task 4: Type coercion — parseInt, parseFloat, toString
445445
446446** Files:**
447447- Modify: ` internal/cel/functions.go `
@@ -621,7 +621,9 @@ git commit -m "feat(cel): add parseInt, parseFloat, toString type coercion funct
621621
622622---
623623
624- ### Task 5: Object construction — obj()
624+ ## Task 5: Object construction — obj()
625+
626+ > ** Implementation note:** The plan originally specified a variadic ` obj() ` overload, but cel-go does not support true variadic functions without macros. The implementation uses fixed-arity overloads for 2, 4, 6, 8, and 10 arguments (1–5 key-value pairs), all sharing a single ` objBinding ` function.
625627
626628** Files:**
627629- Modify: ` internal/cel/functions.go `
@@ -755,7 +757,7 @@ git commit -m "feat(cel): add obj() map construction function"
755757
756758---
757759
758- ### Task 6: Utility functions — default, flatten
760+ ## Task 6: Utility functions — default, flatten
759761
760762** Files:**
761763- Modify: ` internal/cel/functions.go `
@@ -881,7 +883,7 @@ git commit -m "feat(cel): add default() null coalescing and flatten() functions"
881883
882884---
883885
884- ### Task 7: JSON functions — jsonEncode, jsonDecode
886+ ## Task 7: JSON functions — jsonEncode, jsonDecode
885887
886888** Files:**
887889- Modify: ` internal/cel/functions.go `
@@ -1015,7 +1017,7 @@ git commit -m "feat(cel): add jsonEncode and jsonDecode functions"
10151017
10161018---
10171019
1018- ### Task 8: Date/time functions — timestamp , formatTimestamp
1020+ ## Task 8: Date/time functions — parseTimestamp , formatTimestamp
10191021
10201022** Files:**
10211023- Modify: ` internal/cel/functions.go `
@@ -1035,9 +1037,9 @@ func TestFunc_Timestamp(t *testing.T) {
10351037 expr string
10361038 wantErr bool
10371039 }{
1038- {" iso8601" , ` timestamp ("2026-03-24T19:00:00Z")` , false },
1039- {" with_offset" , ` timestamp ("2026-03-24T14:00:00-05:00")` , false },
1040- {" invalid" , ` timestamp ("not a date")` , true },
1040+ {" iso8601" , ` parseTimestamp ("2026-03-24T19:00:00Z")` , false },
1041+ {" with_offset" , ` parseTimestamp ("2026-03-24T14:00:00-05:00")` , false },
1042+ {" invalid" , ` parseTimestamp ("not a date")` , true },
10411043 }
10421044 for _ , tt := range tests {
10431045 t.Run (tt.name , func (t *testing.T ) {
@@ -1055,11 +1057,11 @@ func TestFunc_FormatTimestamp(t *testing.T) {
10551057 eval , err := NewEvaluator ()
10561058 require.NoError (t, err)
10571059
1058- result , err := eval.Eval (` formatTimestamp(timestamp ("2026-03-24T19:00:00Z"), "2006-01-02")` , newTestContext ())
1060+ result , err := eval.Eval (` formatTimestamp(parseTimestamp ("2026-03-24T19:00:00Z"), "2006-01-02")` , newTestContext ())
10591061 require.NoError (t, err)
10601062 assert.Equal (t, " 2026-03-24" , result)
10611063
1062- result, err = eval.Eval (` formatTimestamp(timestamp ("2026-03-24T19:30:45Z"), "15:04:05")` , newTestContext ())
1064+ result, err = eval.Eval (` formatTimestamp(parseTimestamp ("2026-03-24T19:30:45Z"), "15:04:05")` , newTestContext ())
10631065 require.NoError (t, err)
10641066 assert.Equal (t, " 19:30:45" , result)
10651067}
@@ -1068,7 +1070,7 @@ func TestFunc_FormatTimestamp(t *testing.T) {
10681070- [ ] ** Step 2: Run tests to verify they fail**
10691071
10701072Run: ` go test ./internal/cel/ -run "TestFunc_Timestamp|TestFunc_FormatTimestamp" -v `
1071- Expected: FAIL
1073+ Expected: FAIL (functions registered as ` parseTimestamp ` , not ` timestamp ` )
10721074
10731075- [ ] ** Step 3: Add date/time functions**
10741076
@@ -1083,15 +1085,15 @@ type timeLib struct{}
10831085
10841086func (l *timeLib ) CompileOptions () []cel .EnvOption {
10851087 return []cel.EnvOption {
1086- cel.Function (" timestamp " ,
1087- cel.Overload (" timestamp_string " ,
1088+ cel.Function (" parseTimestamp " ,
1089+ cel.Overload (" parseTimestamp_string " ,
10881090 []*cel.Type {cel.StringType },
10891091 cel.TimestampType ,
10901092 cel.UnaryBinding (func (val ref.Val ) ref.Val {
10911093 s := string (val.(types.String ))
10921094 t , err := time.Parse (time.RFC3339 , s)
10931095 if err != nil {
1094- return types.NewErr (" timestamp : %v " , err)
1096+ return types.NewErr (" parseTimestamp : %v " , err)
10951097 }
10961098 return types.Timestamp {Time: t}
10971099 }),
@@ -1144,12 +1146,12 @@ Expected: PASS — all tests including existing ones
11441146
11451147``` bash
11461148git add internal/cel/functions.go internal/cel/functions_test.go
1147- git commit -m " feat(cel): add timestamp and formatTimestamp date/time functions"
1149+ git commit -m " feat(cel): add parseTimestamp and formatTimestamp date/time functions"
11481150```
11491151
11501152---
11511153
1152- ### Task 9: Update CEL expressions documentation
1154+ ## Task 9: Update CEL expressions documentation
11531155
11541156** Files:**
11551157- Modify: ` site/src/content/docs/concepts/expressions.md `
@@ -1207,7 +1209,7 @@ git commit -m "docs: add custom CEL functions and macros to expressions referenc
12071209
12081210---
12091211
1210- ### Task 10: Create data transformations guide
1212+ ## Task 10: Create data transformations guide
12111213
12121214** Files:**
12131215- Create: ` site/src/content/docs/getting-started/data-transformations.md `
@@ -1243,7 +1245,7 @@ git commit -m "docs: add data transformation patterns guide (#14)"
12431245
12441246---
12451247
1246- ### Task 11: Create example workflows
1248+ ## Task 11: Create example workflows
12471249
12481250** Files:**
12491251- Create: ` examples/data-transform-api-to-db.yaml `
@@ -1360,7 +1362,7 @@ git commit -m "feat: add data transformation and AI enrichment example workflows
13601362
13611363---
13621364
1363- # ## Task 12: Final validation
1365+ # # Task 12: Final validation
13641366
13651367- [ ] **Step 1 : Run full test suite**
13661368
0 commit comments