Skip to content

feat(approval): show who decided each save - #206

Closed
abrichr wants to merge 2 commits into
mainfrom
feat/who-approved
Closed

abrichr wants to merge 2 commits into
mainfrom
feat/who-approved

Conversation

@abrichr

@abrichr abrichr commented Oct 18, 2026

Copy link
Copy Markdown
Member

Needs you's technical details now include a Decided by list for each save of an item. Each entry is one of:

  • a person in Run it;
  • a person on their phone (a Cloud-signed, AAL2 decision);
  • a named agent, rule or system, with the first characters of the grant a person signed.

The engine projection (approval_mode.item_approval) adds approvers. It uses closed codes and opaque ids from Flow's approvals rows; names and values never appear.

Some rows are marked unverified, with "a person should look":

  • a delegate row without a grant hash;
  • a delegate on a person's route;
  • a phone answer without AAL2.

Rows that aren't answers are left out.

This is display only. What counts as approved, or as saved without a person, is unchanged. Delegate rows already exist on Flow main. cloud_phone rows appear once Flow ships phone approval (OpenAdaptAI/OpenAdapt#1234); until then this reads the existing rows.

Tests: tests/test_engine/test_item_approvers.py (new) and src/lib/approvalMode.test.ts. Locally, ruff, tsc and vitest pass.

Needs you's technical details now list who answered each save of an item:
a person in Run it or on their phone (signed in or not), or a named agent,
rule or system with the first characters of the grant a person signed. A
delegate row without a grant hash, on a person's route, or a phone answer
without AAL2 reads as unverified, and rows that aren't answers are left out.
Display only: what counts as approved is unchanged.
@abrichr

abrichr commented Oct 18, 2026

Copy link
Copy Markdown
Member Author

Moved to the OpenAdapt monorepo, where openadapt-desktop now lives in packages/desktop: OpenAdaptAI/OpenAdapt#1308. The port keeps both commits and adds the 0.21.0 bump. Closing it here, because any merge in this repository publishes to PyPI.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant