Skip to content

[P1] Replace unsigned credential placeholders with consistent signed action records #237

Description

@brianorwhatever

Problem and priority

Verifiable records of who did what are central to boop. Current action credentials contain unsigned JSON, individual and batch completion record different histories, and agent-key writes collapse attribution into the human owner. P1: the implementation does not yet meet its provenance claim.

Evidence

  • convex/items.ts:17 and convex/lists.ts:56 store JSON.stringify(fullVc) as proof rather than a signature. An in-memory inspection confirmed the generated credential has no signature.
  • convex/items.ts:332 appends a completion credential; convex/items.ts:653 updates batch completion without the corresponding record.
  • convex/lib/actor.ts:46 resolves API-key operations to ownerDid without preserving which key acted.
  • src/components/ProvenanceInfo.tsx:848 presents these records as Verifiable Credentials.

Required change

  • Share one action-recording path across individual and batch transitions, including human and agent writes.
  • Preserve authorizing-owner identity separately from authenticated actor/credential identity. Do not infer agent identity solely from an unverified caller-provided DID.
  • Define the exact action payload and identity binding that a signature covers, then produce independently verifiable signed records using supported Originals facilities.
  • Preserve historical placeholder data as explicitly unsigned records; never fabricate signatures or historical claims during migration.
  • Retire duplicate placeholder constructors and misleading verification presentation after the replacement is ready. Keep genuine CEL/WebVH history intact.

What stays / compatibility

Keep durable historical attribution and real cryptographic evidence. Removing the placeholder wrappers loses no signature assurance, but external vcProof/vcProofs consumers may depend on their shape: confirm them before deleting fields or changing responses. Document signing custody and the scope of what verification proves.

Acceptance and verification

  • Equivalent individual/batch actions produce equivalent histories.
  • Human operations and distinct API-key operations remain distinguishable from their authorizing owner.
  • An independent verifier accepts authentic records and rejects altered payloads/signatures or invalid actor bindings.
  • Historical unsigned records remain readable and are never shown as verified.
  • Existing envelope-tampering and migration tests still pass.
  • Exercise create, complete, reopen, batch, and recurring-item flows; report remaining coverage gaps.

Coordination

Depends on the authenticated identity boundary in #236. Related to #206 (receipt export) and #229 (signature commitment semantics). The signing/anchoring assumptions in #206 are not evidence that these foundations already work; this issue establishes action-record foundations without implementing receipt export.

Implementation constraints

Implement this issue in a separate worktree. Keep changes within this issue's scope; other review recommendations require separate selection. Preserve security, existing signed evidence, and supported client/data compatibility. Run relevant tests and key user flows, and report anything still unverified. Do not remove legacy data or entry points until their dependencies are established.

Source references above are from the reviewed local checkout, commit b1810b7393a473d6c6c63e7f722a6807cfbf4040 (not currently published on GitHub). Re-check the target branch before implementation; do not assume these line numbers remain current.

Activity

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

    P1High: core correctness or explicitly prioritized near-term capabilitybugSomething isn't workingprovenance

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions