Files
memind/page-data-validation-suggestions.test.mjs
john 8ccf2db05c
Memind CI / Test, build, and release guards (push) Failing after 3m18s
feat(page-data): add validation suggestions, repair path, and thinking fixes
Map Page Data failure codes to Chinese remediation hints, trigger one-shot
goosed repair for remediable cases, and recover poisoned thinking sessions.
Route local DeepSeek through the no-think proxy via host.docker.internal so
tool rounds no longer hit reasoning_content 400; document gate and case-study
scenarios for event registration repair.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-25 23:01:55 +08:00

80 lines
3.0 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import {
buildPageDataValidationRepairPrompt,
formatPageDataValidationUserMessage,
isPageDataSuggestionRemediable,
listPageDataValidationSuggestionCodes,
resolvePageDataValidationSuggestions,
suggestionCodesFromPageDataHtmlIssues,
} from './page-data-validation-suggestions.mjs';
test('first-batch Page Data suggestion codes are registered', () => {
const codes = listPageDataValidationSuggestionCodes();
for (const code of [
'PAGE_DATA_DELIVERABLE_MISSING',
'PAGE_DATA_DELIVERY_FAILED',
'DELIVERABLE_DATA_STORAGE_FORBIDDEN',
'COLUMNS_NOT_ALLOWED',
'WORKFLOW_VALIDATION_GATE_UNAVAILABLE',
'WORKFLOW_VALIDATION_GATE_REJECTED',
'WORKFLOW_VALIDATION_GATE_INCONCLUSIVE',
]) {
assert.ok(codes.includes(code), `missing ${code}`);
}
});
test('resolvePageDataValidationSuggestions dedupes and ignores unknown codes', () => {
const suggestions = resolvePageDataValidationSuggestions([
'page_data_deliverable_missing',
'PAGE_DATA_DELIVERABLE_MISSING',
'not-a-real-code',
'columns_not_allowed',
]);
assert.deepEqual(
suggestions.map((item) => item.code),
['PAGE_DATA_DELIVERABLE_MISSING', 'COLUMNS_NOT_ALLOWED'],
);
assert.ok(suggestions[0].actions.length >= 1);
});
test('formatPageDataValidationUserMessage appends actionable Chinese suggestions', () => {
const text = formatPageDataValidationUserMessage({
code: 'WORKFLOW_VALIDATION_GATE_UNAVAILABLE',
message: 'Page Data Orchestrator validation was not observed: not_selected',
});
assert.match(text, /Page Data Orchestrator validation was not observed/);
assert.match(text, /建议(Page Data 审查服务不可用)/);
assert.match(text, /PAGE_DATA_VALIDATION_GATE_ENABLED=0|仅观察/);
});
test('formatPageDataValidationUserMessage keeps original message when code is unknown', () => {
const text = formatPageDataValidationUserMessage({
code: 'SOME_UNKNOWN_CODE',
message: '原始错误',
});
assert.equal(text, '原始错误');
});
test('html issues map to remediable suggestion codes for goosed repair', () => {
assert.deepEqual(
suggestionCodesFromPageDataHtmlIssues([
{ relativePath: 'public/x.html', issue: 'forbidden_local_storage' },
]),
['FORBIDDEN_LOCAL_STORAGE'],
);
assert.equal(isPageDataSuggestionRemediable('DELIVERABLE_DATA_STORAGE_FORBIDDEN'), true);
assert.equal(isPageDataSuggestionRemediable('WORKFLOW_VALIDATION_GATE_UNAVAILABLE'), false);
});
test('buildPageDataValidationRepairPrompt includes Chinese suggestions for goosed', () => {
const prompt = buildPageDataValidationRepairPrompt({
htmlIssues: [{ relativePath: 'public/x.html', issue: 'forbidden_local_storage' }],
unboundFiles: [{ relativePath: 'public/x.html' }],
});
assert.match(prompt, /系统纠正建议/);
assert.match(prompt, /page-data-collect/);
assert.match(prompt, /检测到 localStorage 回退|FORBIDDEN_LOCAL_STORAGE/);
assert.match(prompt, /private_data_bind_workspace_page/);
});