Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go |
| Date | Not specified in source |
| Repository | Janady13/missionmatch |
| Revision | 1e9249840a4302ec82e123b9c9cb6f75badea3e4 |
| Branch | master |
| Path or archive member | internal/integration/ai_phase1_integration_test.go |
| Original SHA-256 | 15cf071e91c42b9d3181849ed0ee809899e048aef52b369a85986556f7197e18 |
| Git blob SHA | 582d4d4d02078885f581ddf03c11c8457f42d38b |
| Reading-copy SHA-256 | 15cf071e91c42b9d3181849ed0ee809899e048aef52b369a85986556f7197e18 |
Every recorded occurrence
These 47 records contain identical original source bytes. Their paths and revisions remain part of the archive.
| Original record | Branch or archive | Revision / identifier | Original location |
|---|---|---|---|
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | master | 1e9249840a4302ec82e123b9c9cb6f75badea3e4 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | feature/aioe-upgrade | 2178e7298d0e5d9af83afa12402fd587f0ba6ed8 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | m5-price-to-win | 41000ad30fff4129fdaf5ec84e15ba14c27d4890 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | w3-ai-staffing-recommendations | 43d56387270ef4da4cabd794d97ca6a49909bc7d | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ws3-clearance | 4b8e7ce594c068621867f9c9deed0ec64ae6c553 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | collision-deconfliction | 4ee5a09972608ed89f8377c6665542d5f450f0a6 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ai-intelligence-layer | 5d5ddff70393a197c5f54a45280bb5dd42b24755 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ws7-federal-signal | 6a9f6ce9cfb13345ffb47770d4960e7c2d9c17c2 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ws6-retrieval | 6c56e29231ec05735927fa265c97d517499dfeaf | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | per-tenant-routing | 9bde0f9a74b89d01980fa658e5253acda7528d0c | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ai-brain-live | aac32fc49c878cc5bca099459307611562d0bac1 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | graphrag-foundation | b0ddeb9f633fd138d09309d1a17b7d13bc3a67f7 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ws1-ontology-sync | b596f449a32a1016fbd403c36505cc00a1ac9ee6 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | time-to-fill-survival | b66e1e505863d4f17741a4b9ede73509e45bd6c6 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | mag-substrate | b82c7100a492dec67dfd1eda6b3f53def859be35 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | capture-readiness | bae6af7cb2997e819174a9e9cfff5e16067a1975 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | deploy-and-ops | bdacd9d0b4d5998d25fc74bf4007f4c3ec538c7a | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ws8-teaching-loop | c823f0fb6bb2aba0f39001eb6de96f4000d9321f | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | phase2-eval-fairness | d361af254701975fe239927656ababb56374655e | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | phase2-connectors | e038d4c687aec16f8bd9bc4d907eea14d91f8704 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ws2-alias-relationship | e4dada4601c6eb101830f9d223a9655dfa120616 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | presentation-readiness | eb574acaa29d71ce4d0f852572e87c275c79fdb7 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ws9-bench-ingestion | f585a9ef32fa554663ce1fba9a414a54b6e49cf0 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | vendor-intelligence | fe9796a19c261951d3f2565206c0c1b5ac294465 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | per-tenant-routing | 9bde0f9a74b89d01980fa658e5253acda7528d0c | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | collision-deconfliction | 4ee5a09972608ed89f8377c6665542d5f450f0a6 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ws6-retrieval | 6c56e29231ec05735927fa265c97d517499dfeaf | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | m5-price-to-win | 41000ad30fff4129fdaf5ec84e15ba14c27d4890 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ws1-ontology-sync | b596f449a32a1016fbd403c36505cc00a1ac9ee6 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | master | 1e9249840a4302ec82e123b9c9cb6f75badea3e4 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ws8-teaching-loop | c823f0fb6bb2aba0f39001eb6de96f4000d9321f | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | w3-ai-staffing-recommendations | 43d56387270ef4da4cabd794d97ca6a49909bc7d | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | mag-substrate | b82c7100a492dec67dfd1eda6b3f53def859be35 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ws3-clearance | 4b8e7ce594c068621867f9c9deed0ec64ae6c553 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | phase2-eval-fairness | d361af254701975fe239927656ababb56374655e | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | time-to-fill-survival | b66e1e505863d4f17741a4b9ede73509e45bd6c6 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ai-intelligence-layer | 5d5ddff70393a197c5f54a45280bb5dd42b24755 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | graphrag-foundation | b0ddeb9f633fd138d09309d1a17b7d13bc3a67f7 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | deploy-and-ops | bdacd9d0b4d5998d25fc74bf4007f4c3ec538c7a | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ws9-bench-ingestion | f585a9ef32fa554663ce1fba9a414a54b6e49cf0 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ws2-alias-relationship | e4dada4601c6eb101830f9d223a9655dfa120616 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | presentation-readiness | eb574acaa29d71ce4d0f852572e87c275c79fdb7 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ws7-federal-signal | 6a9f6ce9cfb13345ffb47770d4960e7c2d9c17c2 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | ai-brain-live | aac32fc49c878cc5bca099459307611562d0bac1 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | phase2-connectors | e038d4c687aec16f8bd9bc4d907eea14d91f8704 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | feature/aioe-upgrade | 2178e7298d0e5d9af83afa12402fd587f0ba6ed8 | Open original |
| Janady13/missionmatch / internal/integration/ai_phase1_integration_test.go | capture-readiness | bae6af7cb2997e819174a9e9cfff5e16067a1975 | Open original |
Recovered source transcript
Download complete source text ↓135 lines · 5.6 KB
//go:build integration
package integration
import (
"context"
"os"
"strings"
"testing"
"github.com/jackc/pgx/v5"
"github.com/shopspring/decimal"
"github.com/missionworkforce/missionmatch/internal/modules/matching"
"github.com/missionworkforce/missionmatch/internal/modules/matching/engine"
"github.com/missionworkforce/missionmatch/internal/platform/config"
"github.com/missionworkforce/missionmatch/internal/platform/database/dbgen"
"github.com/missionworkforce/missionmatch/internal/platform/embeddings"
)
// TestCrossTenantDatabaseIsolation proves the database per tenant boundary: a connection bound to one
// tenant database physically cannot read another tenant's database. Postgres refuses a cross database
// reference, so isolation does not depend on RLS or on application code being correct. Skips unless two
// tenant DSNs are provided (set MM_TENANT_A_DSN and MM_TENANT_B_DSN to two provisioned databases).
func TestCrossTenantDatabaseIsolation(t *testing.T) {
aDSN, bDSN := os.Getenv("MM_TENANT_A_DSN"), os.Getenv("MM_TENANT_B_DSN")
if aDSN == "" || bDSN == "" {
t.Skip("MM_TENANT_A_DSN / MM_TENANT_B_DSN unset; skipping the database per tenant isolation test")
}
ctx := context.Background()
a, err := pgx.Connect(ctx, aDSN)
if err != nil {
t.Fatalf("connect A: %v", err)
}
defer a.Close(ctx)
// The name of database A, so we can attempt a cross database reference from B.
var aName string
if err := a.QueryRow(ctx, "SELECT current_database()").Scan(&aName); err != nil {
t.Fatalf("current_database A: %v", err)
}
b, err := pgx.Connect(ctx, bDSN)
if err != nil {
t.Fatalf("connect B: %v", err)
}
defer b.Close(ctx)
var bName string
_ = b.QueryRow(ctx, "SELECT current_database()").Scan(&bName)
if aName == bName {
t.Fatalf("A and B resolve to the same database %q; they must be separate tenant databases", aName)
}
// From a connection bound to B, reaching into A's tables must fail at the Postgres level.
_, err = b.Exec(ctx, "SELECT 1 FROM "+aName+".public.candidates LIMIT 1")
if err == nil || !strings.Contains(strings.ToLower(err.Error()), "cross-database") {
t.Fatalf("a cross database read from B into A must be refused by Postgres, got: %v", err)
}
// No cross database bridge (dblink / postgres_fdw) may be installed in B.
var bridges int
if err := b.QueryRow(ctx, "SELECT count(*) FROM pg_extension WHERE extname IN ('dblink','postgres_fdw')").Scan(&bridges); err != nil {
t.Fatalf("bridge check: %v", err)
}
if bridges != 0 {
t.Fatalf("a tenant database must have no cross database bridge, found %d", bridges)
}
}
// TestErasureWipesResumeVector proves the right to erasure also wipes the AI vector: after a candidate is
// embedded, anonymize must null resume_embedding so no semantic trace of the person survives.
func TestErasureWipesResumeVector(t *testing.T) {
org := seedOrg(t)
cand := seedCandidate(t, org, "secret", "active", true)
ctx := context.Background()
// Give the candidate a non null embedding (as a backfill would).
vec := "[" + strings.TrimSuffix(strings.Repeat("0.05,", 384), ",") + "]"
if _, err := migrator.Exec(ctx, "UPDATE candidates SET resume_embedding=$1::vector WHERE id=$2", vec, cand.ID); err != nil {
t.Fatalf("set embedding: %v", err)
}
var present bool
_ = migrator.QueryRow(ctx, "SELECT resume_embedding IS NOT NULL FROM candidates WHERE id=$1", cand.ID).Scan(&present)
if !present {
t.Fatal("precondition: the candidate should have an embedding before erasure")
}
// Anonymize (the erasure path) and confirm the vector is gone.
if err := appDB.RunInTenantTx(ctxOrg(org), func(ctx context.Context, tx pgx.Tx) error {
_, e := dbgen.New(tx).AnonymizeCandidate(ctx, cand.ID)
return e
}); err != nil {
t.Fatalf("anonymize: %v", err)
}
var stillThere bool
_ = migrator.QueryRow(ctx, "SELECT resume_embedding IS NOT NULL FROM candidates WHERE id=$1", cand.ID).Scan(&stillThere)
if stillThere {
t.Fatal("ERASURE LEAK: resume_embedding survived anonymize; the person's semantic vector was not wiped")
}
}
// TestEmbedderUsesRealSemantics proves the skill matcher now uses real semantics through the MEGAMIND
// plane, not the deterministic hash fallback: a true synonym pair scores meaningfully higher with the
// real embedder than with the fake one, so the engine's Skills component is semantic. Skips unless the
// inference plane is configured.
func TestEmbedderUsesRealSemantics(t *testing.T) {
url := os.Getenv("MM_MEGAMIND_URL")
if url == "" {
t.Skip("MM_MEGAMIND_URL unset; skipping the semantic skill match test")
}
ctx := context.Background()
required := engine.RequiredSkill{Name: "Amazon Web Services"}
cands := []engine.CandidateSkill{{Name: "AWS cloud"}}
threshold := decimal.RequireFromString("0.50")
real, err := embeddings.New(config.Embeddings{Provider: config.ProviderMegamind, MegamindURL: url, Model: "all-minilm", Dimension: 384})
if err != nil {
t.Fatalf("megamind embedder: %v", err)
}
fake, _ := embeddings.New(config.Embeddings{Provider: config.ProviderFake, Dimension: 384})
realMatch, realOK := matching.NewEmbeddingSkillMatcher(real).Match(ctx, required, cands, threshold)
_, fakeOK := matching.NewEmbeddingSkillMatcher(fake).Match(ctx, required, cands, threshold)
if !realOK {
t.Fatalf("the real embedder should semantically match %q to %q above %s, got similarity %s",
required.Name, cands[0].Name, threshold, realMatch.Similarity)
}
if fakeOK {
t.Fatal("the fake (hash) embedder should NOT semantically match these distinct strings; if it does the test is not proving real semantics")
}
if realMatch.Exact {
t.Fatal("this is a semantic match, not an exact one; Exact must be false")
}
}