Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
1191e11
feat: encrypt recordings, bundles and checkpoints at rest by default
abrichr Nov 3, 2026
9a0b2f4
chore(desktop): release 0.26.0
abrichr Nov 3, 2026
8ba9b14
fix: at-rest review fixes: recording key, missing-key error, mode che…
abrichr Nov 3, 2026
9b5ff48
fix: interim at-rest policy: checkpoints by default, everything in st…
abrichr Nov 3, 2026
89af039
fix: bundle reads use the recording-only key; tests for redacted agen…
abrichr Nov 3, 2026
b068105
style: ruff format
abrichr Nov 3, 2026
1def793
feat: one artifact reader; visualize, explain, emit-skill, for-each, …
abrichr Nov 3, 2026
b87ee28
feat: compose, process, variants, route and process-contract visualiz…
abrichr Nov 3, 2026
db1b181
fix: sealed-input gate reads NAME=PATH arguments and catches a missin…
abrichr Nov 3, 2026
cd941aa
fix: at-rest review: strict allow-list, sealed runs for sealed bundle…
abrichr Nov 3, 2026
78cd244
fix: strict mode runs other sealed-ready commands on encrypted input …
abrichr Nov 4, 2026
03a34a8
test: Desktop notice queries and the compile-agent e2e use a test scr…
abrichr Nov 4, 2026
7e5e49b
Merge main
abrichr Nov 4, 2026
aa7e782
Merge main
abrichr Nov 4, 2026
53321e3
Merge remote-tracking branch 'origin/main' into HEAD
abrichr Nov 4, 2026
e9e0ab4
Merge commit '53321e3ae' into HEAD
abrichr Nov 4, 2026
1fd65c3
Merge remote-tracking branch 'origin/main' into HEAD
abrichr Nov 4, 2026
bf4caff
Merge commit '1fd65c313' into HEAD
abrichr Nov 4, 2026
03b3f33
Merge remote-tracking branch 'origin/main' into HEAD
abrichr Nov 4, 2026
88832e0
Merge commit '03b3f337f' into HEAD
abrichr Nov 4, 2026
901f881
Merge remote-tracking branch 'origin/main' into HEAD
abrichr Nov 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 20 additions & 4 deletions packages/flow/openadapt_flow/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13339,10 +13339,20 @@ def _sealed_paths_in(args: argparse.Namespace) -> list[Path]:
text = str(item)
if "://" in text or "\n" in text or len(text) > 4096:
continue
path = Path(text)
root = path if sealed_set.is_sealed(path) else sealed_set.sealed_root(path)
if root is not None and root not in found:
found.append(root)
# NAME=PATH arguments (--child, --admission, --variant) name a
# path after the first "="; check both readings.
candidates = [text]
if isinstance(item, str) and "=" in text:
candidates.append(text.split("=", 1)[1])
for candidate in candidates:
if not candidate:
continue
path = Path(candidate)
root = (
path if sealed_set.is_sealed(path) else sealed_set.sealed_root(path)
)
if root is not None and root not in found:
found.append(root)
return found


Expand Down Expand Up @@ -13372,6 +13382,12 @@ def _sealed_input_refusal(args: argparse.Namespace) -> Optional[str]:
kind = sealed_set.header_kind(root)
if not sealed_set.passphrase_for(kind):
return sealed_set.missing_key_message(root, kind)
try:
# With no key configured the local key resolves; opening the set
# tells "sealed with a key that isn't set" apart before any work.
sealed_set.open_set(root)
except sealed_set.SealedSetKeyError as exc:
return str(exc)
return None


Expand Down
16 changes: 16 additions & 0 deletions packages/flow/tests/test_artifact_reads.py
Original file line number Diff line number Diff line change
Expand Up @@ -429,3 +429,19 @@ def test_variants_and_route_read_sealed_variants(
assert json.loads(capsys.readouterr().out)["variant"] == "posting"
for bundle, _ in children.values():
_assert_ciphertext_only(bundle)


def test_name_path_arguments_go_through_the_missing_key_check(
tmp_path: Path, monkeypatch: pytest.MonkeyPatch, capsys
) -> None:
children = _sealed_admitted(tmp_path, monkeypatch)
monkeypatch.delenv(crypto.ENV_KEY)
monkeypatch.delenv("OPENADAPT_FLOW_PLAINTEXT_AT_REST", raising=False)
args = ["compose", "--out", str(tmp_path / "composed")]
for name, (bundle, _) in children.items():
args += ["--child", f"{name}={bundle}"]
args += ["--handoff", "intake.patient_id=posting.patient_id"]
assert main(args) == 2
err = capsys.readouterr().err
assert "OPENADAPT_BUNDLE_KEY" in err and "Nothing was read" in err
assert not (tmp_path / "composed").exists()
Loading