{"record":{"id":"7021f1e2f93a7710","repo":"can1357/oh-my-pi","slug":"rewrite-header-reference-1-is-valid-only-ins","errorCode":null,"errorMessage":"${REWRITE_HEADER}${reference[1]} is valid only inside an inline replacement or REWRITE, never MATCH.","messagePattern":"(.+?)(.+?) is valid only inside an inline replacement or REWRITE, never MATCH\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/coding-agent/src/edit/sloppy.ts","lineNumber":1099,"sourceCode":"\t\tif (inline.replacements.length === 1 && inline.replacements[0] === \"\") {\n\t\t\tconst tail = inline.patternText.match(/(?:^|\\n)[ \\t]*⟪⟫[ \\t]*$/u);\n\t\t\tif (tail?.index !== undefined) {\n\t\t\t\tconst remainder = inline.patternText.slice(0, tail.index);\n\t\t\t\tif (normalizeText(remainder).text !== \"\") {\n\t\t\t\t\tconst wholeDeletion: Operation = {\n\t\t\t\t\t\tpatternText: remainder,\n\t\t\t\t\t\tsourcePatternText,\n\t\t\t\t\t\trewrite: { kind: \"explicit\", text: \"\" },\n\t\t\t\t\t\tall,\n\t\t\t\t\t};\n\t\t\t\t\tif (inline.notes.length > 0) wholeDeletion.recoveryNote = inline.notes.join(\"\\n\");\n\t\t\t\t\treturn wholeDeletion;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst reference = patternReference(inline.patternText);\n\t\tif (reference) {\n\t\t\tthrow new Error(\n\t\t\t\t`${REWRITE_HEADER}${reference[1]} is valid only inside an inline replacement or REWRITE, never MATCH.`,\n\t\t\t);\n\t\t}\n\t\tconst operation: Operation = {\n\t\t\tpatternText: relocateSelectionLines(inline.patternText),\n\t\t\tsourcePatternText,\n\t\t\trewrite: { kind: \"inline\", replacements: inline.replacements },\n\t\t\tall,\n\t\t};\n\t\tif (inline.notes.length > 0) operation.recoveryNote = inline.notes.join(\"\\n\");\n\t\treturn operation;\n\t}\n\n\tconst reference = patternReference(sourcePatternText);\n\tif (reference) {\n\t\tthrow new Error(`${REWRITE_HEADER}${reference[1]} is valid only in REWRITE, never MATCH.`);\n\t}\n\tif (rewriteText.trim() !== \"\") {","sourceCodeStart":1081,"sourceCodeEnd":1117,"githubUrl":"https://github.com/can1357/oh-my-pi/blob/969062200754ea02cfac922e5ebb8c608c079e15/packages/coding-agent/src/edit/sloppy.ts#L1081-L1117","documentation":"A » reference (a patternReference like »N pointing at another operation's rewrite) found in a MATCH section's inline pattern is invalid — » rewrites are only meaningful as the target of an inline replacement or inside a REWRITE block, never as bare MATCH pattern text.","triggerScenarios":"createOperation parsing a MATCH (inline) operation whose pattern text contains a »N reference outside an inline replacement context.","commonSituations":"An LLM emits '»2' in a MATCH section intending to alias another op's rewrite; confusion between MATCH and REWRITE section semantics when composing a payload.","solutions":["Move the »N reference into the replacement part of an inline selection (⟪old│»N⟫) or a REWRITE block","Replace the reference with the literal text it pointed to in the MATCH pattern","Change the section from MATCH to REWRITE if the intent was a rewrite"],"exampleFix":"// before\n§ MATCH\n⟪old⟫ »2\n// after\n§ MATCH\n⟪old│»2⟫","handlingStrategy":"validation","validationCode":"if (/^\\s*»\\d+/m.test(matchPatternSection)) {\n  throw new Error('»N references are not allowed in MATCH pattern text');\n}","typeGuard":null,"tryCatchPattern":"try {\n  applySloppy(content, input, ctx);\n} catch (err) {\n  if (err instanceof Error && err.message.includes('valid only inside an inline replacement or REWRITE')) {\n    // move the »N reference into the replacement/REWRITE and re-send\n  } else throw err;\n}","preventionTips":["Place »N references only in replacement positions (⟪old│»N⟫) or REWRITE bodies","Keep MATCH patterns as plain literal text","Review MATCH section layout before submitting"],"tags":["sloppy","rewrite-reference","payload-validation"],"backgroundTag":"misplaced-rewrite-reference","analyzedSha":"969062200754ea02cfac922e5ebb8c608c079e15","analyzedAt":"2026-08-31T10:29:35.737Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}