Skip to content

9.4 Embed promises (2 pts) #60

Closed

Description

@developer-ainative

Epic: E9 — Promise collection and extraction
Points: 2 · Priority: Must · Iteration: 6

As the system, I want each promise embedded, so that it can be matched to bills.

Acceptance criteria:
Every promise has a vector_id; its metadata includes promise_id and person_id.

ZeroDB data: vectors: promises


Source: backlog.md, story 9.4

Activity

  1. developer-ainative commented on Oct 20, 2026

    @developer-ainative
    ContributorAuthor

    Closed by PR #182 (merged). Important finding attached — read before assuming real promises exist to embed.

    app/ingest/promise_embedding.py closes the two hooks story 9.3 explicitly left open (vector_id: None and no event). 100% coverage, 47 tests, full suite green.

    The real extractor is still fabricating promises attributed to real sitting members — now with fresh, worse evidence than story 9.3's original finding

    Before writing anything, this story ran the real extraction pipeline for real against all 6 live promise_sources rows: 264 passages → 8 'commitments', 0 testable, all 8 visibly false positives — worse than 9.3's original 0-for-7. Specifics: electjon.com now 302-redirects to an ActBlue donation page, so two of the eight are fundraising legal boilerplate read as a campaign promise; two are a Pelosi sentence criticizing an opponent misread as her own commitment; two are a Collins biography line. These are fabricated promises attributed to three real named public figures, including two sitting members of Congress.

    None of this was embedded. The live subject used for verification is person:TEST-EMBED-9-4 / 'SYNTHETIC TEST CANDIDATE (not a real person)' with a made-up test quote, following story 6.2's established synthetic-labeling pattern — deleted afterward with a live re-read confirming the real promises table is empty, exactly as it was before this story ran.

    This is the second independent confirmation that story 13.3's standing flag is correct: story 13.2's real Q&A agent, and by extension any feature that presents extracted promises as real, must not ship without a real semantic extractor replacing the current rule-based stub. The gap isn't theoretical — it just produced 8 concrete fabrications against real people in this very verification run.

    Also corrected: the live project has 6 promise_sources (all campaign_website), not 11 across 4 types as story 9.2's own PR described — 9.2's own verify script correctly cleans up after itself on every run, so its archived rows don't persist. Not a bug, a clarification of what's actually live right now.

    Real live API finding: ZeroDB's embed_and_store returns no vector id in its response body (confirmed against the live response shape: {success, vectors_stored, embeddings_generated, model, dimensions, ...}) — so getting the real vector_id back requires a second list-and-match read, now built and tested against the ~60 req/min rate ceiling.

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions