Repository navigation
feat: add inquiry interaction foundation - #22
Merged
Merged
Conversation
david-developer
marked this pull request as ready for review
October 4, 2026 23:30
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
An ACTIVE seeker with a current verified, unreplaced phone can contact an eligible public listing to create or reuse its Interaction and Conversation shell. The server derives provider context, rejects self-contact, checks authoritative public listing visibility and authorizes history to the seeker or current individual provider actor. This slice does not implement messages, a composer, provider inbox or provider responses.
The final migration and command enforce one active listing/seeker/provider context across OPEN and RESTRICTED. Fresh inquiry keys reuse OPEN, deny RESTRICTED with
CAPABILITY_RESTRICTED, and may create a new OPEN after CLOSED history when currently eligible. UUID idempotency and request hashes reject same-key/different-request reuse; insert conflict handling and concurrent recovery preserve the same active-state invariant. A genuinely new Interaction emits exactly oneinteraction_createdsource event.History remains readable to authorized actors after listing visibility is lost, with
title=nullandlisting_visible=false. Reads call the authoritative public visibility policy and only project the approved/current revision title; unapproved current revision content, contact details, private addresses and internal verification/authority/outbox/audit values remain excluded. Historical participant rows do not grant arbitrary current access. Production visibility continues to reject synthetic verification; synthetic allowances are isolated to test stores.This branch was synchronized through an ordinary merge of green main, preserving all inquiry commits without rebase or cherry-pick. The only handoff conflict was resolved additively, retaining discovery, inquiry/correction and both security-maintenance histories while recording the current green-main state. Application code, migrations, regression tests and lockfile are unchanged from the old inquiry head.
2439e30a0bd6bbd61a8655b652c03dd017e9e11a91069faf210fd4e7b39fa1c97ecea936886f7de50956ee2b958047fb39b4b82d79af8e4eb0517dc4dfe9f70823e0db0045e2c94bb15ab70f9a73535fMain was verified separately by exact-main Checks 37240206535 before synchronization. Final-head push Checks 37241338455 and PR Checks 37241342083 both PASSED every gate with no skipped stages: secrets, guarded dependency audit, contracts, clean migrations, full DB/API integration, lint, typecheck, startup/workspace tests, full build/mobile exports and both Chromium suites.
0025_interactions_conversationsRetained regressions cover create, OPEN reuse, idempotent retry and conflicting request, concurrency convergence, RESTRICTED denial, database OPEN/RESTRICTED coexistence prevention, CLOSED reopening, self-contact/phone gating, unrelated-user denial, unapproved-current-revision and authority-stale history suppression, and inquiry visibility loss across publication, freshness, provider eligibility, identity, relationship, authority, media and market discoverability. HTTP tests cover anonymous 401, eligible 201, safe conflicts/denials, RESTRICTED 403, unrelated read 404 and private/internal value exclusion. Browser tests verify anonymous sign-in and phone-verification gates without inquiry mutation, and eligible navigation to a Conversation shell with no composer/contact/private-address leakage. These are synthetic regressions, not real Cognito or end-to-end G2 acceptance.
Local feasible validation also passed: dedicated Interaction 4/4, inquiry HTTP 1/1, DB 26/26, API 8/8, contracts, secrets, configured/unfiltered audits, fresh uncached lint/typecheck/tests/full build and diff checks. Local tests used only localhost:5433/pachi_test; its previously migrated schema was not used as clean-migration acceptance evidence. Clean final 0025 evidence comes from the fresh CI services.
Security policy is inherited from main: PR #23's node-forge
GHSA-86w9-cpqp-85rvand PR #24's bracesGHSA-vfj7-8cjw-p6xmare the only temporary ignores, in that order, at threshold low. Configured audit PASS; unfiltered audit still reports exactly those two HIGH findings and zero others. Neither vulnerability is fixed. Both remain temporary acceptances, reviewed by 2026-10-16, with the documented patched-release/compatible-dependency-removal triggers. No dependency/lockfile changes or third exception were added during synchronization.Durable BlockRelationship/CapabilityRestriction sourcing remains absent; organization participant assignment authorization remains deferred; messaging/provider response and analytics consumption remain incomplete. G2 remains NOT RUN. No Cognito, real verification/evidence, development data or environment files changed. Leave this PR OPEN / DRAFT / UNMERGED for review. No deployment or conversation-messaging implementation is authorized by this synchronization.