Skip to content

Generator: per-request bookkeeping, row-scoped excuses, missing field sets (first-contact retest) #1677

Open

Description

@abrichr

Findings from a held-out first-contact test of the verifier at 76cd4fd, on apps it had never seen. The evidence stays in the private study repository.

  1. Per-request bookkeeping stops every correct write. On three of four apps, every API call by the agent's user writes a column or row: a user's last-login time, a token's last-used time, or a first-login property row. The generator never proposes it, so every correct write was refuted. Fix: during setup, watch the app across a few read-only API calls as the agent's user, and propose those columns as bookkeeping on that user's own row only.
  2. A column excused for the target is excused on every row (fail-open). An accepted bookkeeping answer that excuses an assignment column on the asset being written also excused that column on a look-alike asset. A late write that checked out the look-alike passed the recheck. Fix: excuse a column only on the rows the write declares.
  3. Field sets with no contract. One contract per field set leaves many correct tasks with no contract, so they are stopped at begin. Fix: propose contracts with optional fields, or ask for the missing demonstrations up front.
  4. Coincidental joins and pins. The generator matched on ids that happened to be equal in both demonstrations, and pinned values seen in only one. Setup agents had to fix these by hand. Fix: refuse a join or pin the demonstrations can't tell apart, and ask instead.
  5. Person decisions. Setup needed 9 to 15 person decisions per app (the bar is 3), although the generator asked only 2 questions. Grants, demonstration choices and hand fixes made up the rest.

Activity

  1. added
    agent-readyReady for an automated agent to pick up
    claimedAn agent is working on this
    on Nov 4, 2026
  2. abrichr commented on Nov 4, 2026

    @abrichr
    MemberAuthor

    Claimed by Codex

  3. abrichr commented on Nov 4, 2026

    @abrichr
    MemberAuthor

    Audit at current main 9f026dad3:

    • Target-row bookkeeping is scoped in generate/verify_contract.py:1951 and :2004; test_generate_verify_contract.py:569 covers a late write to a look-alike row.
    • Missing field sets are built by _field_set at verify_contract.py:3974; the regression coverage starts at test_generate_verify_contract.py:653.
    • Coincidental joins/pins have explicit refusal/question handling and test_generate_coincidences*.py coverage; generate: check a copy as a copy even when its values read as the row's own key #1839 also fixed copies that resemble the row's own key.
    • generate/zero_touch.py now answers generator questions and admits only sandbox-validated kinds. That addresses generator answers, but does not establish the total person-decision count for the original setup study.

    Correction to this SQL-only audit: the separate learn workflow already watches checked requests, records only field names, and proposes approved actor-row excuses (openadapt_flow/learn.py, docs/LEARNED_EXCUSES.md). I missed that path when describing read-call observation as a missing input. #1729 identifies two concrete gaps in it: bracketed names and query names arriving during a check. I am working on that bounded follow-up. The original end-to-end total person-decision count, including grants and hand fixes, has not been established by this code audit.

    I am releasing this umbrella claim while its remaining end-to-end acceptance conditions are checked. No implementation or test assertion changed, and no new test run is claimed here.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent-readyReady for an automated agent to pick up

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions