From 1422b6d8db341e0e0b5112c06d7623af69ab40bc Mon Sep 17 00:00:00 2001 From: huangruiteng Date: Sat, 24 Oct 2026 10:36:41 +0800 Subject: [PATCH] fix(research): reuse the canonical digest matcher Signed-off-by: huangruiteng --- loopx/control_plane/capabilities/trajectory_input_usage.ts | 3 ++- tests/control_plane_ts/content_digest_single_owner.test.ts | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/loopx/control_plane/capabilities/trajectory_input_usage.ts b/loopx/control_plane/capabilities/trajectory_input_usage.ts index 90d992fb27..9d8e6f550d 100644 --- a/loopx/control_plane/capabilities/trajectory_input_usage.ts +++ b/loopx/control_plane/capabilities/trajectory_input_usage.ts @@ -2,6 +2,7 @@ * This estimates only explicitly recorded LoopX Turn packets. It never labels * arbitrary prose, a quoted packet, tool output or all compaction as LoopX. */ import type {TrajectoryLoopXInput, TrajectoryRequestCoverage} from './trajectory_assessment_types.ts'; +import {BARE_SHA256_PATTERN} from '../content_digest.ts'; const method = 'tiktoken_o200k_base_input_estimate_v1'; class InputObservationError extends Error {} @@ -21,7 +22,7 @@ function count(value: unknown): number { ? value : fail('Invalid input token estimate.'); } function digest(value: unknown): string { - return typeof value === 'string' && /^[a-f0-9]{64}$/.test(value) ? value : fail('Missing input source digest.'); + return typeof value === 'string' && BARE_SHA256_PATTERN.test(value) ? value : fail('Missing input source digest.'); } export function estimateTrajectoryLoopXInput(value: unknown, session: string, goal: unknown, diff --git a/tests/control_plane_ts/content_digest_single_owner.test.ts b/tests/control_plane_ts/content_digest_single_owner.test.ts index 1a059dc52c..f8cf6a6bee 100644 --- a/tests/control_plane_ts/content_digest_single_owner.test.ts +++ b/tests/control_plane_ts/content_digest_single_owner.test.ts @@ -104,6 +104,7 @@ const CANONICAL_CONSUMERS = [ "control_plane/capabilities/external_evidence.ts", "control_plane/capabilities/goal_capability_organization.ts", "control_plane/capabilities/trajectory_assessment.ts", + "control_plane/capabilities/trajectory_input_usage.ts", "control_plane/collaboration/chat_mode.ts", "control_plane/collaboration/delegation.ts", "control_plane/collaboration/delegation_result_use.ts",