Skip to content
1 change: 1 addition & 0 deletions CAPABILITIES.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ improvising or retrying when something is off.
| Learn one program with branches from two or more recordings, or say which recordings are missing | Released | Synthetic | `openadapt-flow induce`, `disambiguate`; [CAPABILITIES.md (flow)](packages/flow/docs/CAPABILITIES.md) |
| Learn a guarded branch from several halts fixed the same way | Released | Synthetic | `openadapt-flow teach-branch`, `learning/branch_teach.py` |
| Run a program over a worklist | Released | Real app | `openadapt-flow for-each` |
| Learn a worklist loop from recordings that search a record, open it, work it and go back to the list, even when the last row skips the return or rows differ (a field some rows lack, a write some rows get behind a screen check a person accepts). Each pass selects the row's own record by its values, verifies it, and checks that row's write. Certified and governed runs refuse it until qualification covers it | On main ([#1435](https://github.com/OpenAdaptAI/OpenAdapt/pull/1435)) | Synthetic (held-out rows run through the interpreter against an in-memory app) | `openadapt-flow induce`; `Step.target_param` |
| Typed business decisions inside a run | Released | Synthetic | `business_decision` states, `openadapt-flow business-decisions` |
| Watch many real runs in the background and mine candidate branches (shadow mode) | On main ([#1212](https://github.com/OpenAdaptAI/OpenAdapt/pull/1212)) | Synthetic | [SHADOW_MINING.md](packages/capture/docs/SHADOW_MINING.md), [LEARN_FROM_MANY_RUNS.md](packages/flow/docs/LEARN_FROM_MANY_RUNS.md) |
| Fill a workflow's inputs from a referral PDF, fax image or email | Released | Synthetic | `openadapt-flow intake`, [INTAKE.md](packages/flow/docs/INTAKE.md) |
Expand Down
8 changes: 6 additions & 2 deletions packages/flow/openadapt_flow/compiler/compile.py
Original file line number Diff line number Diff line change
Expand Up @@ -1923,6 +1923,7 @@ def _compile_recording(
pixel_verify_enabled: bool = False,
bind_effect_params: bool = False,
drop_redundant_keys: bool = False,
phi_free_identity: bool = True,
) -> Workflow:
"""Compile a recording directory into a workflow bundle.

Expand Down Expand Up @@ -3471,8 +3472,11 @@ def cached_lines(i: int, suffix: str, png: bytes) -> list[OcrLine]:
# (openadapt_flow.runtime.identity_template). Runs LAST so param-hygiene
# lint and optional model annotation still see the plaintext. Backward
# compatible: bundles compiled before this carry the plaintext fields and
# replay unchanged.
_phi_free_identity(workflow)
# replay unchanged. Multi-trace induction compiles with this off and
# hashes the bands itself once the loop's row columns are known
# (compiler.induction.phi_free_program_identity).
if phi_free_identity:
_phi_free_identity(workflow)

# PHI governance manifest (audit REM-1): classify the bundle so an operator
# inventory and the pre-commit/CI guard can act on it.
Expand Down
Loading
Loading