Bubble Tea Parity Workflow
This skill is the router for Bubble Tea parity work. It decides the path; the companion skills own the detailed implementation.
Route first
- Need fresh Go goldens: use
bubbletea-go-teatest-golden. - Need Crystal verification against existing goldens: use
bubbletea-crystal-teatest-golden. - Drift is in example
model/update/view/ harness code: usebubbletea-port-example-parity. - Drift is under
lib/: usecrystal-shard-lib-patch. - No teatest harness exists on either side: use the raw fallback scripts here, then add proper golden coverage.
Default flow
- Refresh Go goldens.
- Sync the generated
*.goldenfiles into the Crystal repo. - Run Crystal verification against the synced fixtures.
- Assign any remaining mismatch to
example,src, orlib.
./scripts/run_teatest_golden_mode.sh \
--go-workdir <go_dir> \
--go-update-cmd '<go teatest command>' \
--sync-goldens-from <go_golden_dir> \
--sync-goldens-to <crystal_golden_dir> \
--crystal-workdir <crystal_dir> \
--crystal-verify-cmd '<crystal spec command>'
Fallback path
Use scripts/run_parity.sh only when a proper teatest/golden harness does not
exist yet. Treat its byte-level output as temporary diagnostics, not final
parity evidence.
Guardrails
- Keep example behavior faithful to Go; do not edit examples just to match a fixture.
- If no Go oracle exists, label the result as smoke verification rather than parity.
- Prefer deterministic message injection over sleep-driven timing.
- Keep temporary captures and caches under
temp/. - If cache or module writes are blocked, rerun with escalation rather than inventing a different workflow.
Completion
Parity work is ready to close when:
- The Go oracle matches the harness under test.
- Crystal verification passes against the synced fixtures.
- Any remaining mismatch has a clear owner.