mirror of
https://github.com/morluto/rea.git
synced 2026-11-15 19:23:24 +00:00
fix(mcp): re-emit advertised patterns in a portable regex grammar (#10582)
* test(mcp): check advertised schemas against a portable dialect in every profile * fix(mcp): re-emit advertised patterns in a portable regex grammar * fix(mcp): validate advertised dialect by selected profile * fix(mcp): preserve schema widening through references * fix(mcp): refuse zero-padded repeat bounds and record host-specific path patterns * fix(mcp): keep references valid when presentation widens their targets * fix(mcp): relax references into negations and conditionals presentation may remove * fix(mcp): keep astral literals and dynamic references widening in every mode * fix(mcp): omit astral literals and relax untracked references when presentation widens * fix(mcp): read reference pointers by schema position, not segment spelling * fix(mcp): protect references into collapsing boolean unions and keep referencing branches out of the collapse * fix(mcp): omit patterns whose classes name astral characters * fix(mcp): decide union collapse and pointer protection from canonical branches * docs(mcp): document non-u astral matching and pin BMP agreement across V8 modes * test(mcp): expect the advertised base64 schema to omit the unbounded pad-bit probe * fix(mcp): protect references into unevaluated keywords lost evaluation removes * fix(mcp): emit stack-safe classes with non-ASCII members and protect draft-07 reference siblings * fix(mcp): protect references into literal siblings of relaxed draft-07 references
This commit is contained in:
1 parent
5bf66f7500
commit
d0fee4e58e
13 files changed
+1575
-195
No files matched your search
@@ -5,6 +5,7 @@ import { createRequire } from "node:module";
|
||||
import { expect, it } from "vitest";
|
||||
|
||||
import { toolContract } from "../contracts/toolContracts.js";
|
||||
import { projectPortablePattern } from "../contracts/portablePattern.js";
|
||||
import { toolOutputSchemaWithMetadata } from "../contracts/toolSchemaMetadata.js";
|
||||
import { javaScriptRouteCandidateSchema } from "../domain/javascript/javascriptRouteFacts.js";
|
||||
import { javaScriptInventoryRouteSchema } from "../domain/javascript/javascriptRouteInventory.js";
|
||||
@@ -47,7 +48,10 @@ it("advertises JavaScript route outputs with standard JSON Schema path constrain
|
||||
addFormats(ajv);
|
||||
expect(() => ajv.compile(advertised as AnySchema)).not.toThrow();
|
||||
|
||||
// The inventory path is nested inside the advertised complete Evidence branch.
|
||||
// The inventory path is nested inside the advertised complete Evidence
|
||||
// branch, re-emitted as a portable anchored pattern.
|
||||
const portable = projectPortablePattern("^\\/");
|
||||
expect(portable.kind).toBe("exact");
|
||||
const patterns: Record<string, unknown>[] = [];
|
||||
const visit = (value: unknown): void => {
|
||||
if (value === null || typeof value !== "object") return;
|
||||
@@ -56,7 +60,11 @@ it("advertises JavaScript route outputs with standard JSON Schema path constrain
|
||||
return;
|
||||
}
|
||||
const record = value as Record<string, unknown>;
|
||||
if (record.pattern === "^\\/") patterns.push(record);
|
||||
if (
|
||||
portable.kind !== "unexpressible" &&
|
||||
record.pattern === portable.pattern
|
||||
)
|
||||
patterns.push(record);
|
||||
Object.values(record).forEach(visit);
|
||||
};
|
||||
visit(advertised);
|
||||
|
||||
Reference in new issue
Block a user