Repository navigation
feat: narration proposes branch rules; recordings, a probe or a person certify them - #1291
Merged
Merged
Conversation
The transcript is scrubbed with openadapt-privacy before it is stored, and recording refuses before the microphone opens when no scrubber is installed. Scrubbed sentences go to narration.json on the recording clock; per-word text is no longer stored. capture transcribe scrubs too. Synthetic WAV fixture. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…certify them A sentence lined up near a branch point (an optional step or a two-path divergence) is parsed into a guard on a recorded field or a screen element. It certifies only when every recording agrees or a person accepts it; a contradicting recording keeps the point refused. Certified guards carry their sentence in Workflow.guard_sources. Narration sidecar, alignment, attach, and capture-adapter carry-over. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tion CLI induce --probe-on also replays the narrated reading where narration proposed a guard nobody contradicted; it certifies when that reading produces every recorded effect and dropping the step does not. induce --accept-narrated LOCATION --accepted-by NAME, --narration-model (opt-in, own key). New narration attach/show command. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ion in teach-branch visualize (HTML, Mermaid, JSON) shows each guard with the sentence that suggested it and what certified it; non-local profiles drop the sentence. teach-branch uses a narrated sentence to pick the narrowing parameter only when every example and normal run agrees. repair show lists the sentences. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- check a param guard against the recordings with the runtime's exact compare - leave a divergence refused when another step sits inside it, and insert branches at the same position in column order - pin acceptances and probe results to the guard id (LOCATION@GUARD_ID) - accept only a JSON boolean from the model, and screen text the person said - parser: stop at 'otherwise', flip 'it's not X', read 'isn't needed' as skip, drop double negatives and unplaced negations - skip a malformed narration.json instead of failing - link the capability row to #1291 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # CAPABILITIES.md # packages/capture/README.md # packages/flow/openadapt_flow/ir.py
# Conflicts: # CAPABILITIES.md
Regenerate the public artifact inventory for the changed visualize files, apply ruff format, and fix three mypy errors. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # CAPABILITIES.md
# Conflicts: # CAPABILITIES.md
# Conflicts: # CAPABILITIES.md # packages/flow/public-artifacts.json
Member
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Builds the map row "Use spoken narration while recording to learn why a branch was taken."
Stacked on #1276 (and #1260 through it). Merge those first; this diff then shrinks to the narration work. The install line uses the
audioextra from #1271.What it does
--audiobefore the microphone opens when the scrubber is missing. Scrubbed sentences go tonarration.json, timed on the recording clock. Per-word text is no longer stored.capture transcribescrubs too.narration.json).openadapt-flow narration attachdoes the same for any recording from a WAV or a transcript, so web, native, RDP and Citrix all work the same way.param_equals) or on screen text (text_present). Works for optional steps and for two-path divergences.--probe-onconfirms it (newnarratedreading), or a person accepts it (--accept-narrated LOC --accepted-by NAME). A contradicting recording keeps the point refused, and a person can't accept it.Workflow.guard_sources(omitted when empty, so existing bundles are byte-identical).visualize(HTML, Mermaid, JSON) andrepair showshow it. Non-local visualize profiles drop the sentence.--narration-modelis opt-in, compile time only, on the customer's key, scrubbed outbound, and its answer is validated. Runs make no model calls.Tests
Synthetic data only.
packages/capture/tests/fixtures/narration/medicare_copay.wavis speech generated locally with macOSsay(invented name).tiny.en) on the fixture: passes locally; skipped in CI unless the model is cached (never downloads)Local:
tests/test_narration_rules.py29 passed,test_teach_branch_narration.py4, capturetest_narration.py7 +test_audio_privacy.py15; a 37-file Flow slice (induction, probe, teach, visualize, repair, privacy, capture adapter) 690 passed.Docs:
packages/flow/docs/NARRATION.md, capture README/COMPLIANCE/DESIGN, rootCAPABILITIES.mdrow (build_llms_full.pyre-run).🤖 Generated with Claude Code