Skip to content

feat(storage): add research project store#48

Draft
hubab1 wants to merge 1 commit into
32b-research-project-schemafrom
32c-research-project-store
Draft

feat(storage): add research project store#48
hubab1 wants to merge 1 commit into
32b-research-project-schemafrom
32c-research-project-store

Conversation

@hubab1

@hubab1 hubab1 commented Jul 19, 2026

Copy link
Copy Markdown
Owner

Summary

  • add an actor-isolated research-project store that returns immutable Sendable snapshots
  • implement project create/list/update/delete and keyword-membership list/add/remove
  • enforce UTF-8 field bounds, strict storefronts, deterministic paging, 100-project and 500-keyword-per-project caps
  • use durable incarnation-aware optimistic revisions so stale handles cannot mutate delete/recreated rows
  • make caller UUID creates/adds idempotent without overwriting current state, and deduplicate memberships through unchanged opaque V1 query-key factories
  • preserve shared query, ranking, metric, and difficulty evidence when memberships or projects are deleted
  • wire the store into AppServices and the standalone runtime while exposing only a read-only protocol to MCP

Validation

  • focused store tests: 8/8 passed
  • full test suite: 351/351 passed
  • signed Debug app build passed; Apple Development signature verified
  • two final independent P0/P1/P2 reviews clear
  • no application launch or live user store access

Inherited standalone target gate

The standalone OpenASOMCP scheme still stops on its pre-existing missing source memberships (RankingRefreshRequest, SearchRankingProvider, review/metrics types, and related dependencies). This PR adds the new store to that target and validates the runtime factory through the app test host, but does not broaden scope into the item-17 standalone dependency repair. No MCP research mutation tool is exposed; the injected dependency is read-only.

Review gate

Draft/manual review required because this is persistence lifecycle code stacked on schema PR #46.

Contributes to #3.

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