
Security News
GitHub to Block pull_request_target Workflows by Default Starting December 2
GitHub is tightening GitHub Actions security with new restrictions on privileged pull request workflows. Here's what changes and how maintainers are affected.
@memberjunction/record-comparison
Advanced tools
MemberJunction: Framework-agnostic record comparison engine — loads a set of records for one entity and computes a structured field-level delta. Shared by the duplicate-detection reasoning path and the UI side-by-side comparison panel.
Framework-agnostic record comparison primitive for MemberJunction.
RecordComparisonEngine loads a set of records for a single entity and computes a
structured, field-level delta between them — a survivor candidate plus its potential
matches diffed column-by-column. It performs a read-only load (RunView with
ResultType: 'simple' and a targeted field list) and never mutates records.
The comparison logic is needed by two callers that sit on opposite sides of the dependency graph:
@memberjunction/ai-vector-dupe),
which feeds the differing-field deltas to the reasoning provider as context.@memberjunction/core-entities-server → MJServer resolver → GraphQL client →
Angular record-merge).@memberjunction/core-entities-server depends on @memberjunction/ai-vector-dupe, so
the dupe package sits lower in the graph and cannot reach an engine that lives in the
server package without creating a build cycle. Hoisting the engine into this low-level
package (its only dependency is @memberjunction/core) gives both sides a single
implementation with no cycle and no duplicated delta logic.
import { RecordComparisonEngine } from '@memberjunction/record-comparison';
import { CompositeKey } from '@memberjunction/core';
const engine = new RecordComparisonEngine();
// By entity name (resolver / UI path) — resolves the entity from metadata.
const result = await engine.CompareRecords(
{ EntityName: 'Accounts', Keys: [survivorKey, candidateKey] },
contextUser,
provider // request-scoped IMetadataProvider (multi-provider safety)
);
// With an already-resolved EntityInfo + an injected RunView (dupe path) — skips the
// by-name lookup and reuses the caller's request-scoped RunView.
const result2 = await engine.CompareRecordsForEntity(
entityInfo,
[sourceKey, ...candidateKeys],
contextUser,
{ runView }
);
result.Fields is a plain-data delta matrix (no BaseEntity instances), so it
serializes cleanly across GraphQL and into a reasoning prompt.
FAQs
MemberJunction: Framework-agnostic record comparison engine — loads a set of records for one entity and computes a structured field-level delta. Shared by the duplicate-detection reasoning path and the UI side-by-side comparison panel.
The npm package @memberjunction/record-comparison receives a total of 1,398 weekly downloads. As such, @memberjunction/record-comparison popularity was classified as popular.
We found that @memberjunction/record-comparison demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 12 open source maintainers collaborating on the project.

Security News
GitHub is tightening GitHub Actions security with new restrictions on privileged pull request workflows. Here's what changes and how maintainers are affected.

Security News
/Application Security
A practical guide to securing GitHub Actions against supply chain attacks, covering malicious pull requests, credential theft, dependency risks, and release pipelines.

Security News
Composer 2.11 adds dependency cooldowns, joining package managers that delay new releases to reduce supply chain risks while allowing urgent security updates.