LOCAL-FIRST DEVELOPER TOOL

Voice UX,
with evidence.

Turn redacted dictation traces into a parity report you can act on.

Built for the comparison step after testing two dictation apps. Your traces stay local.

Included demo Output excerpt
# FlowDiff report

Candidate compared with Baseline

candidate score  62.5%
parity           50.0%
gaps             4

settings         candidate_gap
history          candidate_gap
recovery         candidate_gap
multi-display    candidate_gap
Excerpt from the included synthetic report. The gaps are the work.
8 capability events in every trace
Human authored outcomes, not captured audio
Local no network client, telemetry, or cache

Install the repo, then run the demo.

Everything needed to try FlowDiff is in the public repository. Clone it, run the included comparison, then bring the same shape into a real UX review.

  1. Install from GitHub

    Clone the repo that contains the plugin manifest, local server, demo, and tests.

    git clone https://github.com/henryvn27/flowdiff.git cd flowdiff
  2. Run the included demo

    Generate a Markdown parity report from the synthetic Baseline and Candidate traces.

    python3 server.py --demo --format markdown
  3. Use it in the review

    After testing two apps, pass in sanitized outcomes and let the report name the next check.

    Ask Codex Compare these sanitized dictation UX traces.
Check the setup before using the demo.
python3 -m unittest discover -s tests -v

Use it in the review.

FlowDiff is for the handoff between trying a product and deciding what to fix. The input stays small so the output stays reviewable.

  1. Record outcomes

    Mark activation, feedback, insertion, settings, history, privacy, recovery, and multi-display behavior.

  2. Validate a trace

    Keep statuses, timing, and evidence codes inside the public contract before sharing them.

  3. Compare two traces

    Get a parity matrix with bounded deltas and gap descriptions that point to the next useful check.

Small input. Strict output.

The validator accepts eight capability events, bounded statuses, and allowlisted evidence codes. Unknown fields fail closed.

{
  "schema_version": "1",
  "app": "Candidate",
  "events": [{
    "capability": "activation",
    "status": "pass",
    "duration_ms": 150,
    "evidence_codes": ["bar_opened"]
  }]
}

FLOWDIFF

Make the next comparison repeatable.

Open the source, run the demo, and use the report in the review that follows.

Open the repository