Skip to content

Commit ac5ec1d

Browse files
committed
feat: regenerate all demos as 18 segments with docgen
Restructured from 14 to 18 segments: - 01-06: platform core (refreshed narration + new TTS) - 07: merge & release pipeline (NEW) - 08-09: orchestrator + multi-team Helm (renumbered) - 10: baggage middleware deep-dive (NEW) - 11: testing ecosystem (renamed/expanded from newman-tests) - 12-13: test-trace graph + results DB (renumbered) - 14: customization — hooks, variants, schema (NEW) - 15-17: regression, GUI tour, GUI extension (REWRITTEN) - 18: M13 roadmap — what's coming next (NEW) New Manim scenes: MergeReleaseScene, BaggageMiddlewareScene, CustomizationScene, ManagementGUITourScene, GUIExtensionPatternScene, RoadmapScene. All outputs: H.264 + AAC + faststart (web-native playback). Concat: full-demo (01-13), full-demo-complete (01-18), platform-core (01-07). Total runtime: ~45 minutes. Made-with: Cursor
1 parent 4c5a137 commit ac5ec1d

45 files changed

Lines changed: 48939 additions & 390 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/demos/animations/scenes.py

Lines changed: 673 additions & 0 deletions
Large diffs are not rendered by default.

docs/demos/animations/timing.json

Lines changed: 47597 additions & 289 deletions
Large diffs are not rendered by default.

docs/demos/docgen.yaml

Lines changed: 76 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ dirs:
1212
recordings: recordings
1313

1414
segments:
15-
default: ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11"]
15+
default: ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13"]
1616
all:
1717
- "01"
1818
- "02"
@@ -28,26 +28,31 @@ segments:
2828
- "12"
2929
- "13"
3030
- "14"
31+
- "15"
32+
- "16"
33+
- "17"
34+
- "18"
3135

32-
# Segment → narration file name stems (matches narration/*.md file names)
3336
segment_names:
3437
"01": "01-architecture"
3538
"02": "02-quickstart"
3639
"03": "03-bootstrap-dataflow"
3740
"04": "04-pr-pipeline"
3841
"05": "05-intercept-routing"
3942
"06": "06-local-debug"
40-
"07": "07-orchestrator"
41-
"08": "08-multi-team-helm"
42-
"09": "09-results-db"
43-
"10": "10-newman-tests"
44-
"11": "11-test-trace-graph"
45-
"12": "12-regression-suite"
46-
"13": "13-management-gui-architecture"
47-
"14": "14-gui-tekton-extension"
43+
"07": "07-merge-release"
44+
"08": "08-orchestrator"
45+
"09": "09-multi-team-helm"
46+
"10": "10-baggage-middleware"
47+
"11": "11-testing-ecosystem"
48+
"12": "12-test-trace-graph"
49+
"13": "13-results-db"
50+
"14": "14-customization"
51+
"15": "15-regression-suite"
52+
"16": "16-management-gui"
53+
"17": "17-extending-gui"
54+
"18": "18-roadmap"
4855

49-
# Visual source mapping — matches the VISUAL_MAP from compose.sh
50-
# type: manim | vhs | mixed | still
5156
visual_map:
5257
"01":
5358
type: manim
@@ -77,56 +82,73 @@ visual_map:
7782
scene: LocalDebugScene
7883
source: LocalDebugScene.mp4
7984
"07":
80-
type: vhs
81-
tape: 07-orchestrator-api.tape
82-
source: 07-orchestrator-api.mp4
85+
type: manim
86+
scene: MergeReleaseScene
87+
source: MergeReleaseScene.mp4
8388
"08":
89+
type: vhs
90+
tape: 08-orchestrator-api.tape
91+
source: 08-orchestrator-api.mp4
92+
"09":
8493
type: manim
8594
scene: MultiTeamScene
8695
source: MultiTeamScene.mp4
87-
"09":
88-
type: vhs
89-
tape: 09-results-db.tape
90-
source: 09-results-db.mp4
9196
"10":
92-
type: vhs
93-
tape: 10-newman.tape
94-
source: 10-newman.mp4
97+
type: manim
98+
scene: BaggageMiddlewareScene
99+
source: BaggageMiddlewareScene.mp4
95100
"11":
101+
type: vhs
102+
tape: 11-testing.tape
103+
source: 11-testing.mp4
104+
"12":
96105
type: mixed
97106
scene: BlastRadiusScene
98-
tape: 11-graph-tests.tape
107+
tape: 12-graph-tests.tape
99108
sources:
100109
- BlastRadiusScene.mp4
101-
- 11-graph-tests.mp4
102-
"12":
103-
type: manim
104-
scene: RegressionSuiteScene
105-
source: RegressionSuiteScene.mp4
110+
- 12-graph-tests.mp4
106111
"13":
107-
type: manim
108-
scene: ManagementGUIArchitectureScene
109-
source: ManagementGUIArchitectureScene.mp4
112+
type: vhs
113+
tape: 13-results-db.tape
114+
source: 13-results-db.mp4
110115
"14":
111116
type: manim
112-
scene: GUIExtensionScene
113-
source: GUIExtensionScene.mp4
117+
scene: CustomizationScene
118+
source: CustomizationScene.mp4
119+
"15":
120+
type: vhs
121+
tape: 15-regression.tape
122+
source: 15-regression.mp4
123+
"16":
124+
type: manim
125+
scene: ManagementGUITourScene
126+
source: ManagementGUITourScene.mp4
127+
"17":
128+
type: manim
129+
scene: GUIExtensionPatternScene
130+
source: GUIExtensionPatternScene.mp4
131+
"18":
132+
type: manim
133+
scene: RoadmapScene
134+
source: RoadmapScene.mp4
114135

115-
# Manim rendering config
116136
manim:
117137
quality: 720p30
118138
scenes:
119139
- StackDAGScene
120140
- HeaderPropagationScene
121141
- InterceptRoutingScene
122142
- LocalDebugScene
143+
- MergeReleaseScene
123144
- MultiTeamScene
145+
- BaggageMiddlewareScene
124146
- BlastRadiusScene
125-
- RegressionSuiteScene
126-
- ManagementGUIArchitectureScene
127-
- GUIExtensionScene
147+
- CustomizationScene
148+
- ManagementGUITourScene
149+
- GUIExtensionPatternScene
150+
- RoadmapScene
128151

129-
# TTS config
130152
tts:
131153
model: gpt-4o-mini-tts
132154
voice: coral
@@ -135,7 +157,6 @@ tts:
135157
called tekton-dag. Speak in a calm, professional tone. Pronounce technical
136158
terms clearly: Tekton, Kubernetes, Helm, Newman, pytest, Neo4j, Manim.
137159
138-
# Concat configs for full demo files
139160
concat:
140161
full-demo:
141162
- "01"
@@ -149,7 +170,9 @@ concat:
149170
- "09"
150171
- "10"
151172
- "11"
152-
full-demo-with-m12-2:
173+
- "12"
174+
- "13"
175+
full-demo-complete:
153176
- "01"
154177
- "02"
155178
- "03"
@@ -164,10 +187,22 @@ concat:
164187
- "12"
165188
- "13"
166189
- "14"
190+
- "15"
191+
- "16"
192+
- "17"
193+
- "18"
194+
platform-core:
195+
- "01"
196+
- "02"
197+
- "03"
198+
- "04"
199+
- "05"
200+
- "06"
201+
- "07"
167202

168-
# Validation thresholds
169203
validation:
170204
max_drift_sec: 2.75
205+
max_freeze_ratio: 0.85
171206
ocr:
172207
error_patterns:
173208
- "command not found"
@@ -188,7 +223,6 @@ validation:
188223
- "script section"
189224
- "edit for voice"
190225

191-
# Wizard config
192226
wizard:
193227
llm_model: gpt-4o
194228
system_prompt: >
@@ -206,7 +240,6 @@ wizard:
206240
- "**/terminal/rendered/**"
207241
- "**/.venv/**"
208242

209-
# GitHub Pages
210243
pages:
211244
title: "tekton-dag Demo Videos"
212245
description: "CI/CD pipeline platform demo recordings"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
The pull request passed. Tests are green. The developer clicks merge. What happens next?
2+
3+
A GitHub webhook fires and the orchestrator generates a PipelineRun in merge mode. Unlike the pull-request pipeline, which builds only the changed service, the merge pipeline produces a release-quality artifact with proper semantic versioning.
4+
5+
The first interesting step is the version bump task running in release mode. During the pull-request cycle, the version file tracked a release candidate suffix — something like zero dot one dot zero dash rc dot three. The release version bump strips that suffix. The app version becomes zero dot one dot zero — a clean release number.
6+
7+
Next, the pipeline compiles and containerizes the merged code, just like the PR build, but tagged with the merge commit SHA. The compile tasks use the same parameterized build images — Maven, Gradle, npm, pip, or Composer — with the resource profiles configured per team.
8+
9+
Here is where the merge pipeline diverges from the PR pipeline. The tag release images task uses crane — a fast, daemon-less container tool — to copy the built image and re-tag it with the release semver. The image registry now holds the app at v zero dot one dot zero. No rebuild needed — crane copies the layers directly.
10+
11+
After tagging, the pipeline bumps the version file to the next development cycle. Zero dot one dot zero becomes zero dot one dot one dash rc dot zero — ready for the next pull request to start incrementing the release candidate again. This version commit is pushed back to the repository automatically using SSH credentials.
12+
13+
If the team has configured hook tasks, they run at the right points. A post-build hook might trigger an image security scan or generate a software bill of materials. A pre-test hook might seed test data. These are optional Tekton Tasks wired through pipeline parameters — no need to fork the core pipeline definition.
14+
15+
The result is a release-tagged container image sitting in your registry, ready for promotion. How you promote — Argo Rollouts, a Helm upgrade, a manual release script — is up to your deployment strategy. tekton-dag handles everything up to the release artifact.
16+
17+
Pull request tested. Version promoted. Image tagged. Hooks executed. Version file bumped for the next cycle. That is the merge and release pipeline.
File renamed without changes.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
Intercept routing depends on one thing: every service in the call chain must propagate the dev-session header. If any service drops it, the routing breaks. The baggage middleware libraries make this automatic across five frameworks.
2+
3+
Every service has a propagation role defined in the stack YAML. An originator starts the chain — it sets the dev-session header on all outgoing requests. A forwarder reads the incoming header, stores it in request context, and attaches it to every downstream call. A terminal accepts the header for routing and logging but does not forward it further.
4+
5+
Let's walk through each framework.
6+
7+
In Spring Boot, the baggage starter auto-configures everything. A servlet filter called BaggageContextFilter reads the incoming header and stores it using OpenTelemetry Baggage and a thread-local context holder. A RestTemplate interceptor called BaggageRestTemplateInterceptor automatically adds the header to every outbound HTTP call. The entire setup activates with a single property: baggage dot enabled equals true. If the property is false or absent, the filter and interceptor are not registered. Zero overhead in production.
8+
9+
For Node and Vue, the library provides createBaggageFetch — a wrapper around the native fetch API that injects the header — and createAxiosInterceptor for Axios-based projects. The default configuration reads from environment variables like VITE underscore BAGGAGE underscore ENABLED, so the browser build can include or exclude baggage at compile time.
10+
11+
In Flask and Python, the init underscore app function registers a before-request hook that extracts the header and stores it on Flask's g object. For outbound calls, BaggageSession extends the standard requests dot Session class to add the header automatically. Same pattern: enabled by an environment variable, zero-cost when disabled.
12+
13+
The PHP implementation uses PSR-15 middleware for inbound requests and a Guzzle middleware for outbound HTTP. The BaggageMiddleware class reads its configuration from environment variables and can be instantiated with a static fromEnv factory method.
14+
15+
All five implementations follow the W3C Baggage specification alongside the custom x-dev-session header. The W3C baggage header carries key-value pairs in a standardized format, which means third-party observability tools can read the routing context without custom parsing.
16+
17+
The critical safety feature is the enabled flag. In every framework, baggage propagation is off by default. It activates only when the environment variable is explicitly set to true. This means you can deploy the middleware to production and it does nothing until you opt in — no accidental header leakage, no performance impact.
18+
19+
Five frameworks. One header contract. Zero application code changes beyond configuration. That is the baggage middleware.

docs/demos/narration/10-newman-tests.md

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
Testing is a first-class concern in tekton-dag. The platform supports four testing frameworks — Newman for API contracts, pytest for Python services, Playwright for end-to-end GUI testing, and Artillery for load testing — all integrated into the pipeline and regression workflows.
2+
3+
Every stack definition includes test specifications attached to each app. The run stack tests task in the pipeline executes these tests with the dev-session header injected. For Postman collections, it uses Newman — the Postman CLI runner — to execute API tests against the live stack. The dev-session header is added to every request so the tests hit the pull-request build through the intercept chain.
4+
5+
For orchestrator HTTP contracts against a live cluster, Newman runs the Postman collection via the run orchestrator tests shell script: port-forward to the cluster, call the REST API, and optionally trigger PipelineRuns. That workflow differs from a full system regression, which is documented in the regression guide.
6+
7+
For fast unit coverage without a cluster, pytest exercises the orchestrator's Flask app, routes, stack resolver, PipelineRun builder, and Kubernetes client wrapper with mocks. Watch the output — dozens of tests across the orchestrator modules, all passing. They verify stack resolution, manifest generation, webhook parsing, and endpoint error handling.
8+
9+
The shared Python package tekton-dag-common has its own test suite as well. Fourteen tests cover the base stack resolver, PipelineRun builder, and Kubernetes constants that are shared between the orchestrator and the management GUI backend.
10+
11+
The management GUI has its own Playwright end-to-end suite — sixty-nine tests covering the web interface. These navigate every view, trigger pipeline actions, verify DAG rendering, and check team switching. The Flask backend has fifty-plus pytest tests covering every API route with mocked Kubernetes responses.
12+
13+
For load testing, Artillery scenarios exercise the stack under concurrent traffic. The artillery variants script runs multiple configurations — baseline load, burst traffic, and sustained throughput — and captures response time distributions. These run during regression or on demand, not on every pull request.
14+
15+
For end-to-end integration, the run e2e with intercepts script triggers a full pull-request pipeline flow and validates that header propagation works through the entire stack. This is the highest-fidelity test — it proves the complete workflow from webhook to cleanup on a live cluster.
16+
17+
Application repos run their Postman, Playwright, and Artillery suites inside stack-pr-test when a pull request opens — those are stack-scoped tests. The orchestrator pytest suite and the full platform regression scripts are system-level: they validate this platform against a cluster and are run on demand, on a schedule, or before releases.
18+
19+
Four frameworks. Stack-scoped and system-level tiers. Full coverage from unit to load. That is the testing ecosystem.

docs/demos/narration/12-regression-suite.md

Lines changed: 0 additions & 9 deletions
This file was deleted.

0 commit comments

Comments
 (0)