diff --git a/docs/development/agent-workflow.md b/docs/development/agent-workflow.md index 32de7cd5b..301e3118e 100644 --- a/docs/development/agent-workflow.md +++ b/docs/development/agent-workflow.md @@ -71,7 +71,7 @@ HTML video, audio, source and track `src` assets and video posters use the same existence checks as images. Entity decoding uses full HTML text/attribute rules, including references whose semicolon may be omitted. Inline guidance imports are rejected after punctuation as well as whitespace. -At-signs inside external URIs (including opaque schemes such as mailto) are excluded +At-signs inside external URIs (including explicit opaque autolinks such as mailto) are excluded per HTML text node, preserving adjacent imports. A colon directly before an import does not make that import a URI. A closing bracket followed by punctuation and an at-sign terminates a bare URL exclusion. diff --git a/tools/skills/agent-guidance-markdown.mjs b/tools/skills/agent-guidance-markdown.mjs index ff3a34754..133a28b52 100644 --- a/tools/skills/agent-guidance-markdown.mjs +++ b/tools/skills/agent-guidance-markdown.mjs @@ -147,7 +147,7 @@ export function guidanceProse(markdown) { return ' '; if (node.nodeName === '#text') return node.value.replace( - /(?:\b[a-z][a-z\d+.-]*:(?![@\s])|\/\/)[^\s]*?(?=[)\]}>][.,;:!?]*@|\s|$)/giu, + /(?:(?][.,;:!?]*@|\s|$)/giu, ' ' ); const content = (node.childNodes ?? []).map(text).join(''); diff --git a/tools/skills/validate-agent-guidance.test.mjs b/tools/skills/validate-agent-guidance.test.mjs index a463cebbe..d49b97bb3 100644 --- a/tools/skills/validate-agent-guidance.test.mjs +++ b/tools/skills/validate-agent-guidance.test.mjs @@ -1507,7 +1507,6 @@ for (const boundary of [').', '];', '}']) { for (const uri of [ '', - 'mailto:user@example.com?subject=@docs/guide.md', '', ]) { test(`opaque URI is not a guidance import: ${uri}`, async (t) => {