@1aboveio/skills 0.10.1 → 0.11.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.
- package/README.md +2 -2
- package/package.json +1 -1
- package/runtime/skills/distribution/generated/recipes.json +29 -19
- package/skills/backend/pyspark/LICENSE +3 -0
- package/skills/backend/pyspark/SKILL.md +116 -0
- package/skills/backend/pyspark/assets/templates/etl.py +696 -0
- package/skills/backend/pyspark/assets/templates/utils/__init__.py +1 -0
- package/skills/backend/pyspark/assets/templates/utils/hudi_metadata.py +14 -0
- package/skills/backend/pyspark/references/diagnosis-and-profiling.md +145 -0
- package/skills/backend/pyspark/references/etl-contract.md +107 -0
- package/skills/backend/pyspark/references/parity-testing.md +83 -0
- package/skills/backend/pyspark/references/production-validation.md +166 -0
- package/skills/backend/pyspark/references/transformation-design.md +162 -0
- package/skills/backend/pyspark/references/velocity-feature-calculation.md +193 -0
- package/skills/backend/pyspark/scripts/spark_eventlog_summary.py +223 -0
- package/skills/engineering/engineering-runtime/coherence/workflow.json +14 -14
- package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +1 -1
- package/skills/engineering/resolve-issues/generated/workflow-repair-policy.json +11 -11
- package/skills/engineering/resolve-issues/scripts/run-state.mjs +1 -1
package/README.md
CHANGED
|
@@ -43,7 +43,7 @@ Declining leaves the existing content and its links exactly as they were.
|
|
|
43
43
|
|
|
44
44
|
- `engineering-workflow` — Engineering Workflow: e2e-test, ensure-coverage, implement-and-pr, resolve-issues, resolve-release, review-pr, smoke, engineering-runtime
|
|
45
45
|
- `delivery-infrastructure` — Delivery Infrastructure: cloud-build, cloud-debug, cloud-deploy, docker, google-cloud, mergify, podman
|
|
46
|
-
- `backend` — Backend: airflow-dag-develop, app-debug, python-backend
|
|
46
|
+
- `backend` — Backend: airflow-dag-develop, app-debug, pyspark, python-backend
|
|
47
47
|
- `fullstack` — Fullstack: better-auth, monorepo, nextjs-fullstack, prisma-setup, shadcn, zod-v4, impeccable — impeccable is fetched from its upstream owner and not included in this package
|
|
48
48
|
- `matt-pocock-toolkit` — Matt Pocock Toolkit: batch-grill-me, code-review, codebase-design, diagnosing-bugs, domain-modeling, grill-me, grill-with-docs, grilling, handoff, improve-codebase-architecture, prototype, research, resolving-merge-conflicts, setup-matt-pocock-skills, tdd, to-spec, to-tickets, triage, wayfinder — every member is fetched from its upstream owner and is not included in this package
|
|
49
49
|
|
|
@@ -69,7 +69,7 @@ npx skills@1.5.22 remove --global --agent universal claude-code --skill e2e-test
|
|
|
69
69
|
# Delivery Infrastructure
|
|
70
70
|
npx skills@1.5.22 remove --global --agent universal claude-code --skill cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman
|
|
71
71
|
# Backend
|
|
72
|
-
npx skills@1.5.22 remove --global --agent universal claude-code --skill airflow-dag-develop app-debug python-backend
|
|
72
|
+
npx skills@1.5.22 remove --global --agent universal claude-code --skill airflow-dag-develop app-debug pyspark python-backend
|
|
73
73
|
# Fullstack
|
|
74
74
|
npx skills@1.5.22 remove --global --agent universal claude-code --skill better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 impeccable
|
|
75
75
|
# Matt Pocock Toolkit
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"id": "first-party",
|
|
9
9
|
"type": "first-party",
|
|
10
10
|
"package": "@1aboveio/skills",
|
|
11
|
-
"version": "0.
|
|
11
|
+
"version": "0.11.0",
|
|
12
12
|
"updatePolicy": "pinned-npm-version",
|
|
13
13
|
"members": [
|
|
14
14
|
{
|
|
@@ -113,6 +113,12 @@
|
|
|
113
113
|
"role": "skill",
|
|
114
114
|
"licenseResponsibility": "1aboveio-mit"
|
|
115
115
|
},
|
|
116
|
+
{
|
|
117
|
+
"installName": "pyspark",
|
|
118
|
+
"path": "skills/backend/pyspark",
|
|
119
|
+
"role": "skill",
|
|
120
|
+
"licenseResponsibility": "1aboveio-mit"
|
|
121
|
+
},
|
|
116
122
|
{
|
|
117
123
|
"installName": "python-backend",
|
|
118
124
|
"path": "skills/backend/python-backend",
|
|
@@ -448,7 +454,7 @@
|
|
|
448
454
|
"sourceId": "first-party",
|
|
449
455
|
"sourceType": "first-party",
|
|
450
456
|
"package": "@1aboveio/skills",
|
|
451
|
-
"version": "0.
|
|
457
|
+
"version": "0.11.0",
|
|
452
458
|
"installPath": null,
|
|
453
459
|
"members": [
|
|
454
460
|
"harness-runtime",
|
|
@@ -520,7 +526,7 @@
|
|
|
520
526
|
"sourceId": "first-party",
|
|
521
527
|
"sourceType": "first-party",
|
|
522
528
|
"package": "@1aboveio/skills",
|
|
523
|
-
"version": "0.
|
|
529
|
+
"version": "0.11.0",
|
|
524
530
|
"installPath": null,
|
|
525
531
|
"members": [
|
|
526
532
|
"harness-runtime",
|
|
@@ -564,7 +570,7 @@
|
|
|
564
570
|
"sourceId": "first-party",
|
|
565
571
|
"sourceType": "first-party",
|
|
566
572
|
"package": "@1aboveio/skills",
|
|
567
|
-
"version": "0.
|
|
573
|
+
"version": "0.11.0",
|
|
568
574
|
"installPath": null,
|
|
569
575
|
"members": [
|
|
570
576
|
"harness-runtime",
|
|
@@ -597,7 +603,7 @@
|
|
|
597
603
|
"sourceId": "first-party",
|
|
598
604
|
"sourceType": "first-party",
|
|
599
605
|
"package": "@1aboveio/skills",
|
|
600
|
-
"version": "0.
|
|
606
|
+
"version": "0.11.0",
|
|
601
607
|
"installPath": null,
|
|
602
608
|
"members": [
|
|
603
609
|
"harness-runtime",
|
|
@@ -640,18 +646,19 @@
|
|
|
640
646
|
"sourceId": "first-party",
|
|
641
647
|
"sourceType": "first-party",
|
|
642
648
|
"package": "@1aboveio/skills",
|
|
643
|
-
"version": "0.
|
|
649
|
+
"version": "0.11.0",
|
|
644
650
|
"installPath": null,
|
|
645
651
|
"members": [
|
|
646
652
|
"harness-runtime",
|
|
647
653
|
"airflow-dag-develop",
|
|
648
654
|
"app-debug",
|
|
655
|
+
"pyspark",
|
|
649
656
|
"python-backend"
|
|
650
657
|
],
|
|
651
658
|
"commands": [
|
|
652
659
|
{
|
|
653
660
|
"transport": "local",
|
|
654
|
-
"command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime airflow-dag-develop app-debug python-backend"
|
|
661
|
+
"command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime airflow-dag-develop app-debug pyspark python-backend"
|
|
655
662
|
}
|
|
656
663
|
],
|
|
657
664
|
"onFailure": {
|
|
@@ -669,18 +676,19 @@
|
|
|
669
676
|
"sourceId": "first-party",
|
|
670
677
|
"sourceType": "first-party",
|
|
671
678
|
"package": "@1aboveio/skills",
|
|
672
|
-
"version": "0.
|
|
679
|
+
"version": "0.11.0",
|
|
673
680
|
"installPath": null,
|
|
674
681
|
"members": [
|
|
675
682
|
"harness-runtime",
|
|
676
683
|
"airflow-dag-develop",
|
|
677
684
|
"app-debug",
|
|
685
|
+
"pyspark",
|
|
678
686
|
"python-backend"
|
|
679
687
|
],
|
|
680
688
|
"commands": [
|
|
681
689
|
{
|
|
682
690
|
"transport": "local",
|
|
683
|
-
"command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime airflow-dag-develop app-debug python-backend"
|
|
691
|
+
"command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime airflow-dag-develop app-debug pyspark python-backend"
|
|
684
692
|
}
|
|
685
693
|
],
|
|
686
694
|
"onFailure": {
|
|
@@ -691,7 +699,7 @@
|
|
|
691
699
|
]
|
|
692
700
|
},
|
|
693
701
|
"uninstall": {
|
|
694
|
-
"command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill airflow-dag-develop app-debug python-backend",
|
|
702
|
+
"command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill airflow-dag-develop app-debug pyspark python-backend",
|
|
695
703
|
"removesDependencies": false
|
|
696
704
|
}
|
|
697
705
|
},
|
|
@@ -708,7 +716,7 @@
|
|
|
708
716
|
"sourceId": "first-party",
|
|
709
717
|
"sourceType": "first-party",
|
|
710
718
|
"package": "@1aboveio/skills",
|
|
711
|
-
"version": "0.
|
|
719
|
+
"version": "0.11.0",
|
|
712
720
|
"installPath": null,
|
|
713
721
|
"members": [
|
|
714
722
|
"harness-runtime",
|
|
@@ -760,7 +768,7 @@
|
|
|
760
768
|
"sourceId": "first-party",
|
|
761
769
|
"sourceType": "first-party",
|
|
762
770
|
"package": "@1aboveio/skills",
|
|
763
|
-
"version": "0.
|
|
771
|
+
"version": "0.11.0",
|
|
764
772
|
"installPath": null,
|
|
765
773
|
"members": [
|
|
766
774
|
"harness-runtime",
|
|
@@ -916,7 +924,7 @@
|
|
|
916
924
|
"sourceId": "first-party",
|
|
917
925
|
"sourceType": "first-party",
|
|
918
926
|
"package": "@1aboveio/skills",
|
|
919
|
-
"version": "0.
|
|
927
|
+
"version": "0.11.0",
|
|
920
928
|
"installPath": null,
|
|
921
929
|
"members": [
|
|
922
930
|
"harness-runtime"
|
|
@@ -942,7 +950,7 @@
|
|
|
942
950
|
"sourceId": "first-party",
|
|
943
951
|
"sourceType": "first-party",
|
|
944
952
|
"package": "@1aboveio/skills",
|
|
945
|
-
"version": "0.
|
|
953
|
+
"version": "0.11.0",
|
|
946
954
|
"installPath": null,
|
|
947
955
|
"members": [
|
|
948
956
|
"harness-runtime"
|
|
@@ -1012,7 +1020,7 @@
|
|
|
1012
1020
|
"sourceId": "first-party",
|
|
1013
1021
|
"sourceType": "first-party",
|
|
1014
1022
|
"package": "@1aboveio/skills",
|
|
1015
|
-
"version": "0.
|
|
1023
|
+
"version": "0.11.0",
|
|
1016
1024
|
"installPath": null,
|
|
1017
1025
|
"members": [
|
|
1018
1026
|
"harness-runtime",
|
|
@@ -1033,6 +1041,7 @@
|
|
|
1033
1041
|
"podman",
|
|
1034
1042
|
"airflow-dag-develop",
|
|
1035
1043
|
"app-debug",
|
|
1044
|
+
"pyspark",
|
|
1036
1045
|
"python-backend",
|
|
1037
1046
|
"better-auth",
|
|
1038
1047
|
"monorepo",
|
|
@@ -1044,7 +1053,7 @@
|
|
|
1044
1053
|
"commands": [
|
|
1045
1054
|
{
|
|
1046
1055
|
"transport": "local",
|
|
1047
|
-
"command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime e2e-test ensure-coverage implement-and-pr resolve-issues resolve-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman airflow-dag-develop app-debug python-backend better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 && npm ci --ignore-scripts --prefix \"$HOME/.agents/skills/engineering-runtime/scripts\""
|
|
1056
|
+
"command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime e2e-test ensure-coverage implement-and-pr resolve-issues resolve-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman airflow-dag-develop app-debug pyspark python-backend better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 && npm ci --ignore-scripts --prefix \"$HOME/.agents/skills/engineering-runtime/scripts\""
|
|
1048
1057
|
}
|
|
1049
1058
|
],
|
|
1050
1059
|
"onFailure": {
|
|
@@ -1120,7 +1129,7 @@
|
|
|
1120
1129
|
"sourceId": "first-party",
|
|
1121
1130
|
"sourceType": "first-party",
|
|
1122
1131
|
"package": "@1aboveio/skills",
|
|
1123
|
-
"version": "0.
|
|
1132
|
+
"version": "0.11.0",
|
|
1124
1133
|
"installPath": null,
|
|
1125
1134
|
"members": [
|
|
1126
1135
|
"harness-runtime",
|
|
@@ -1141,6 +1150,7 @@
|
|
|
1141
1150
|
"podman",
|
|
1142
1151
|
"airflow-dag-develop",
|
|
1143
1152
|
"app-debug",
|
|
1153
|
+
"pyspark",
|
|
1144
1154
|
"python-backend",
|
|
1145
1155
|
"better-auth",
|
|
1146
1156
|
"monorepo",
|
|
@@ -1152,7 +1162,7 @@
|
|
|
1152
1162
|
"commands": [
|
|
1153
1163
|
{
|
|
1154
1164
|
"transport": "local",
|
|
1155
|
-
"command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime e2e-test ensure-coverage implement-and-pr resolve-issues resolve-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman airflow-dag-develop app-debug python-backend better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 && npm ci --ignore-scripts --prefix \"$HOME/.agents/skills/engineering-runtime/scripts\""
|
|
1165
|
+
"command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime e2e-test ensure-coverage implement-and-pr resolve-issues resolve-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman airflow-dag-develop app-debug pyspark python-backend better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 && npm ci --ignore-scripts --prefix \"$HOME/.agents/skills/engineering-runtime/scripts\""
|
|
1156
1166
|
}
|
|
1157
1167
|
],
|
|
1158
1168
|
"onFailure": {
|
|
@@ -1183,7 +1193,7 @@
|
|
|
1183
1193
|
]
|
|
1184
1194
|
},
|
|
1185
1195
|
"uninstall": {
|
|
1186
|
-
"command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill e2e-test ensure-coverage implement-and-pr resolve-issues resolve-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman airflow-dag-develop app-debug python-backend better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 impeccable batch-grill-me code-review codebase-design diagnosing-bugs domain-modeling grill-me grill-with-docs grilling handoff improve-codebase-architecture prototype research resolving-merge-conflicts setup-matt-pocock-skills tdd to-spec to-tickets triage wayfinder harness-runtime"
|
|
1196
|
+
"command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill e2e-test ensure-coverage implement-and-pr resolve-issues resolve-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman airflow-dag-develop app-debug pyspark python-backend better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 impeccable batch-grill-me code-review codebase-design diagnosing-bugs domain-modeling grill-me grill-with-docs grilling handoff improve-codebase-architecture prototype research resolving-merge-conflicts setup-matt-pocock-skills tdd to-spec to-tickets triage wayfinder harness-runtime"
|
|
1187
1197
|
}
|
|
1188
1198
|
}
|
|
1189
1199
|
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pyspark
|
|
3
|
+
description: Implement, debug, review, and optimize Apache Spark or PySpark batch jobs, ETL pipelines, feature calculations, and warehouse writes. Use whenever work involves Spark DataFrames or SQL, joins, windows, grouped state, UDFs, shuffle, skew, spill, slow stages, Spark Connect, spark-submit, Hudi publication, backfills, semantic parity, or production canaries, even when the request is framed only as a warehouse timeout or performance regression.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# PySpark
|
|
7
|
+
|
|
8
|
+
Use this skill as the workflow and routing index. Read the referenced playbooks
|
|
9
|
+
that match the task before editing code or running a production-scale job.
|
|
10
|
+
|
|
11
|
+
## Workflow
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
contract -> transform -> materialize -> test -> CI/CD
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Follow all five steps in order.
|
|
18
|
+
|
|
19
|
+
### 1. Contract
|
|
20
|
+
|
|
21
|
+
- **Input:** declare all parameters, defaults, validation, source snapshot/date
|
|
22
|
+
scope, overlapping-run behavior, idempotency/single-writer rules, and exact
|
|
23
|
+
Python and PySpark versions.
|
|
24
|
+
- **Output:** declare plain Spark versus Hudi table type, output identity/schema,
|
|
25
|
+
partition columns, record key, deterministic order or precombine field, and
|
|
26
|
+
append/upsert/overwrite write mode.
|
|
27
|
+
- **Conventions:** declare native Spark versus Spark Connect and full rebuild
|
|
28
|
+
versus incremental processing, including the incremental watermark,
|
|
29
|
+
lookback/checkpoint, and restart boundary when applicable.
|
|
30
|
+
|
|
31
|
+
Read [ETL Contract](references/etl-contract.md). When the repository has no ETL
|
|
32
|
+
base module, adapt [`assets/templates/etl.py`](assets/templates/etl.py).
|
|
33
|
+
|
|
34
|
+
### 2. Transform
|
|
35
|
+
|
|
36
|
+
- Make `transform` accept DataFrames and return the complete candidate without
|
|
37
|
+
invoking validation or a writer.
|
|
38
|
+
- Estimate rows after joins/explodes/groups and measure maximum rows per key.
|
|
39
|
+
Fix algorithmic expansion and hot keys before tuning Spark configuration.
|
|
40
|
+
- Prefer built-in expressions and windows. Use exact bucketing or one sorted
|
|
41
|
+
grouped sweep only for state that built-ins cannot express cleanly.
|
|
42
|
+
- Preserve complete row identity, ordering, output columns, and required
|
|
43
|
+
behavior.
|
|
44
|
+
- Avoid explicit `.cache()` and `.persist()` by default.
|
|
45
|
+
|
|
46
|
+
Read [Transformation Design](references/transformation-design.md). For temporal
|
|
47
|
+
windows or FIFO paths, also read
|
|
48
|
+
[Velocity Feature Calculation](references/velocity-feature-calculation.md).
|
|
49
|
+
|
|
50
|
+
### 3. Materialize
|
|
51
|
+
|
|
52
|
+
- Treat materialization as the Spark action that executes the lazy candidate,
|
|
53
|
+
not as caching.
|
|
54
|
+
- Use one aggregate validation action before every writer. Reference every
|
|
55
|
+
derived output so Catalyst cannot prune untested calculations.
|
|
56
|
+
- Check row count, distinct/null/duplicate identities, domain blockers, and
|
|
57
|
+
required date/partition scope. Fail closed on any blocker.
|
|
58
|
+
- Bind validation and publication to the same immutable source snapshot because
|
|
59
|
+
Spark may recompute the candidate.
|
|
60
|
+
- Keep the validate-only guard inside the job and before every writer. Do not
|
|
61
|
+
add `.count()`, `.cache()`, or `.persist()` to warm execution.
|
|
62
|
+
|
|
63
|
+
Read [Production Validation](references/production-validation.md).
|
|
64
|
+
|
|
65
|
+
### 4. Test
|
|
66
|
+
|
|
67
|
+
1. **Local test:** run pure state, tiny real-Spark, plan-shape, focused repository,
|
|
68
|
+
and bidirectional parity tests. Cover boundaries, ties, nulls, arithmetic,
|
|
69
|
+
identity, and precedence.
|
|
70
|
+
2. **Cluster canary test:** run the production entry point and source scope with
|
|
71
|
+
`--validate-only`. Require zero blockers, an explicit publication skip, zero
|
|
72
|
+
Spark output records/bytes, and readable driver/event logs.
|
|
73
|
+
3. **Profiling:** measure an isolated baseline, parse the canary event log, and
|
|
74
|
+
compare both runs on the same source scope and resource profile. Record
|
|
75
|
+
wall/stage/task time, cardinality, shuffle, spill, skew, output, and target
|
|
76
|
+
plan patterns.
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
spark-submit <production-options> job.py --validate-only
|
|
80
|
+
set -o pipefail
|
|
81
|
+
hdfs dfs -cat "$EVENT_LOG" | \
|
|
82
|
+
python {baseDir}/scripts/spark_eventlog_summary.py > canary-summary.json
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Reject missing evidence, incomparable scope, unexplained regressions, or a
|
|
86
|
+
missed performance gate. Keep validate-only time separate from write time.
|
|
87
|
+
|
|
88
|
+
Read [Parity Testing](references/parity-testing.md),
|
|
89
|
+
[Diagnosis And Profiling](references/diagnosis-and-profiling.md), and
|
|
90
|
+
[Production Validation](references/production-validation.md).
|
|
91
|
+
|
|
92
|
+
### 5. CI/CD
|
|
93
|
+
|
|
94
|
+
1. Open a PR with required-behavior, test, canary, profiling, and risk evidence.
|
|
95
|
+
2. Run required CI and independent review; fix failures.
|
|
96
|
+
3. Enqueue through the configured merge queue and merge without bypassing gates.
|
|
97
|
+
4. Deploy only the merged commit through the normal deployment path.
|
|
98
|
+
5. Run write-enabled production validation only with explicit authorization;
|
|
99
|
+
reconcile counts, identity, schema, coverage, blockers, readability, write
|
|
100
|
+
mode, and commit evidence independently.
|
|
101
|
+
6. Restore scheduler/process ownership and report compute/validation,
|
|
102
|
+
publication, and end-to-end time separately.
|
|
103
|
+
|
|
104
|
+
Read [Production Validation](references/production-validation.md).
|
|
105
|
+
|
|
106
|
+
## Reference Index
|
|
107
|
+
|
|
108
|
+
| Need | Read or run |
|
|
109
|
+
|---|---|
|
|
110
|
+
| Define or review an ETL job contract | [ETL Contract](references/etl-contract.md) and `assets/templates/etl.py` |
|
|
111
|
+
| Diagnose or profile | [Diagnosis And Profiling](references/diagnosis-and-profiling.md) |
|
|
112
|
+
| Design transformations | [Transformation Design](references/transformation-design.md) |
|
|
113
|
+
| Optimize temporal/FIFO state | [Velocity Feature Calculation](references/velocity-feature-calculation.md) |
|
|
114
|
+
| Prove parity | [Parity Testing](references/parity-testing.md) |
|
|
115
|
+
| Run canaries or writes | [Production Validation](references/production-validation.md) |
|
|
116
|
+
| Summarize an event log | `scripts/spark_eventlog_summary.py` |
|